Python 加权随机
2017-02-27 本文已影响468人
清醒的cola
稀有度随机
问题1. 有一堆数据 x = [1,5,7],随机取出一个数?
random.choice(x)
问题2. 如何按照权重20 , 20 , 60取出一个数?
我们可以把总和 100分成几个区间,0 - 19 分给 1, 20 - 39 分给 5, 40 - 99 分给7, 再随机0 - 99 看这个随机数落在哪个区间就可以了。
import random
import bisect
m = [20, 20, 60]
n = []
count = 0
for i, v in enumerate(m):
n.append(count)
count += v
rd = random.randint(0, count -1)
r = bisect.bisect_right(n, rd)
result = x[r]
注意:m必须是排好顺序的,bisect二分查找binary search需要 bisect.bisect_right(n, rd) 插入的 rd 在 n 的位置。
其中 n 的值可以使用
from itertools import accumulate
n = list(accumulate(data))
使用 Python 写算法的时候,注意多找找相关的第三方包,总有惊喜等着你。