我已經實現了以下類,根據輸入頻率'p'生成'p'或'q'。但是,如果頻率小於用於存儲選項的列表大小,則此實現會中斷。有沒有一種方法可以實現這一點,以便爲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()
必讀,如果你需要適應兩個以上的可能值://eli.thegreenplace:Bendersky對[加權隨機生成(HTTP的文章。 net/2010/01/22/weighted-random-generation-in-python /)。 – DSM