
稀有度隨機(jī)
問題1. 有一堆數(shù)據(jù) x = [1,5,7],隨機(jī)取出一個數(shù)?
random.choice(x)
問題2. 如何按照權(quán)重20 , 20 , 60取出一個數(shù)?
我們可以把總和 100分成幾個區(qū)間,0 - 19 分給 1, 20 - 39 分給 5, 40 - 99 分給7, 再隨機(jī)0 - 99 看這個隨機(jī)數(shù)落在哪個區(qū)間就可以了。
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 寫算法的時候,注意多找找相關(guān)的第三方包,總有驚喜等著你。