首页 > 解决方案 > 有没有比这更好的从列表中随机选择的方法:

问题描述

choices = [a,a,a,a,b,b,c]
random.choice(choices)

如您所见, a 最有可能被选中,但是否有更好/更短的方法来做到这一点?

标签: pythonpython-3.x

解决方案


如果你使用choices, not choice,你可以为每个元素指定一个权重。

random.choices([a,b,c], [4,2,1])

第二个参数是第一个参数中每个元素的相对权重。例如,在下文中,您可以看到a被选择的频率大约是 的两倍,b大约是 的四倍c

>>> import collections, random
>>> collections.Counter(random.choices('abc', [4,2,1], k=100))
Counter({'a': 58, 'b': 25, 'c': 17})

推荐阅读