程序员大数据 爬虫Python AI Sql

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 写算法的时候,注意多找找相关的第三方包,总有惊喜等着你。

上一篇下一篇

猜你喜欢

热点阅读