gpt4 book ai didi

python - 稳健的加权随机字符串生成器

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:40 26 4
gpt4 key购买 nike

我已经实现了以下类,以根据“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()

最佳答案

不要使用 self.values .在 next , 生成一个0到1之间的随机数,返回'p'如果随机数小于 p :

from random import random

class AlleleGenerator(object):
def __init__(self, p):
"""construct class and creates list to select from"""
self.p = p
def next(self):
"""Returns p or q based on allele frequency"""
return 'p' if random() < self.p else 'q'
def __call__(self):
return self.next()

还有,小心not to use classes当功能足够时。例如,您可能会考虑使用 generator function :

from random import random

def allele_generator(p):
while True:
yield 'p' if random() < p else 'q'

agen = allele_generator(0.001)
for i in range(3):
print(next(agen))

关于python - 稳健的加权随机字符串生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21147598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com