如何解决创建一个生成器以从列表中产生随机数
我想创建一个生成器,它从预先指定的列表中吐出一个随机数。像这样:
x = random_select([1,2,3])
next(x) # 1
next(x) # 3
next(x) # 3
next(x) # 2
# and so on
我该怎么做?
这是我的动机。我知道我可以使用 random.choice
到 select a value randomly。我的问题是,在我的程序中,有时我想从给定的列表中随机选择项目,而其他时候我想循环遍历元素(任一选项的次数可变)。我用 itertools
做后者:
import itertools
y = itertools.cycle([1,3])
next(y) # 1
next(y) # 2
next(y) # 3
next(y) # 1
# and so on
我想创建一个生成器对象,它可以随机而不是循环生成列表的值,这样我仍然可以使用 next
获取我需要的所有值,而不必指定何时使用 random.choice
检索值。例如。目前我这样做:
import itertools
import random
l = [1,3]
select = 'random'
output = []
cycle = itertools.cycle(l) # could conditionally build this generator
for i in range(10):
if select == 'random':
output.append(random.choice(l))
elif select == 'cycle':
output.append(next(cycle))
我觉得这个逻辑很笨拙,如果我添加更多选择选项,它可能会变得更糟。我想做类似的事情:
l = [1,3]
select = 'cycle'
options = {'cycle':itertools.cycle,'random':random_select}
g = options[select](l)
output = [next(g) for i in range(10)]
解决方法
您可以像这样创建这样的生成器:
import random
def random_select(l):
while True:
yield random.choice(l)
g = random_select([1,2,3])
这将从 l
中无限产生随机选择,并适用于上面的最后一个示例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。