3, 5], 那么就会随机的返回0(概率0.2), 1(概率0.3), 2(概率0.5)
简单的思路就是把所有的权重加和, 然后随机一个数, 看看落在哪个区间
import random
def weighted_choice...已经可以完成我们所要的加权随机, 然是最后的这个for循环貌似有些啰嗦, Python有个内置方法bisect可以帮我们加速这一步
import random
import bisect
def weighted_choice...去掉临时变量
其实在这个方法里面totals这个数组并不是必要的, 我们调整下策略, 就可以判断出weights中的位置
def weighted_choice(weights):
rnd = random.random...更多的随机数
如果我们使用同一个权重数组weights, 但是要多次得到随机结果, 多次的调用weighted_choice方法, totals变量还是有必要的, 提前计算好它, 每次获取随机数的消耗会变得小很多...accumulate
>>>> data = [2, 3, 5, 10]
>>>> list(accumulate(data))
[2, 5, 10, 20]
如果你有更好的方法, 欢迎在留言区讨论
参考文章: Weighted