Python 加权随机

本方法的原理是把所有权重的数值相加得到一个权重的总和,然后在 1 到总和之间随机选取一个整数。把权重由小到大按升序排列,依此把权重相加,直到大于或等于选取的随机数为止,此时记相机次数为n,列表的第 n-1 项即为输出的加权随即项。

# 选项
list = ['A', 'B', 'C']

# 权重,升序排列
weighted = [1, 2, 4]

def weighted_random(list, weighted):
    # 从1到权重之和间随机抽取一个整数
    r = random.randint(1, sum(weighted)) 

    # 把权重依此相加,直到大于或等于随机数r,相加的次数记为n,跳出循环
    # 从选项列表中取 n-1 位作为输出的加权随机数
    c = 0
    for index, w in enumerate(weighted):
        c = c + w
        if c >= r:
            return (list[index])
            break

可以用以下代码验证下本方法:

all = []
for i in range(700):
    all.append(weighted_random(list, weighted))
print('A:', all.count("A"))
print('B:', all.count("B"))
print('C:', all.count("C"))

你可能感兴趣的:(Python 加权随机)