'p'또는 'q'의 입력 빈도를 기반으로 'p'를 생성하기 위해 다음 클래스를 구현했습니다. 그러나 빈도가 옵션을 저장하는 데 사용되는 목록의 크기보다 작아지면이 구현이 중단됩니다. p의 값에 상관없이 작동하도록 구현할 수있는 방법이 있습니까?확률 가중치 임의의 문자열 생성기
from random import random
class AlleleGenerator(object):
"""
allele generator - will break if p < 0.001
"""
def __init__(self, p):
"""construct class and creates list to select from"""
self.values = list()
for i in xrange(int(1000*p)):
self.values.append('p')
while len(self.values) <= 1000:
self.values.append('q')
def next(self):
"""Returns p or q based on allele frequency"""
rnd = int(random() * 1000)
return self.values[rnd]
def __call__(self):
return self.next()
필수 읽기 : 예를 들어, generator function 사용을 고려할 수 //eli.thegreenplace : [가중 무작위로 생성 (HTTP에 Bendersky의 기사를. net/2010/01/22/weighted-random-generation-in-python /)을 파이썬으로 작성했습니다. – DSM