Python 整数列表中的加权随机数
我有一个整数列表,我希望能够根据列表中的权重选择一个随机数 例如,假设我有这样一个列表:Python 整数列表中的加权随机数,python,Python,我有一个整数列表,我希望能够根据列表中的权重选择一个随机数 例如,假设我有这样一个列表:list=[20,40,80,60] 我选择数字1(或0,取决于你怎么看)的几率是10%,而选择数字3的几率是30% 我该如何以pythonic的方式进行此操作?一个简单的算法可能如下所示: import bisect import random def random_choice(choices, weights): """ >>> a = ['Hit', 'Out']
list=[20,40,80,60]
我选择数字1(或0,取决于你怎么看)的几率是10%,而选择数字3的几率是30%
我该如何以pythonic的方式进行此操作?一个简单的算法可能如下所示:
import bisect
import random
def random_choice(choices, weights):
"""
>>> a = ['Hit', 'Out']
>>> b = [.3, .7]
>>> random_choice(a,b)
"""
cumsums = []
c = 0
for weight in weights:
c += weight
cumsums.append(c)
rnd = random.uniform(0, c)
i = bisect.bisect(cumsums, rnd)
return choices[i]
演示:
但是,如果您计划多次调用random\u choice
,则有些算法会更有效。
有关许多选项的比较,请参见和。您看到了吗?谢谢你,它很有魅力。不完全符合我的需要,但我成功了。
>>> random_choice(list('ABCD'), weights=[20,40,80,60])
'C'