在Python中按权重随机选择对象

0 投票
1 回答
3055 浏览
提问于 2025-04-16 20:01

可能的重复问题:
随机加权选择
从一个有权重的列表中选择随机的k个元素

假设我有一组N个物体,

set = range(a,b) = [a,a+1,...b-2, b-1]

为了以1/len(N)的概率选择M个物体,我可以这样做:

random.sample(set, M).

我想随机选择物体,但要根据权重来决定概率。比如说,如果这个数不是3或5的倍数,权重概率就是1。如果是3的倍数,权重概率就是3;如果是5的倍数,权重概率就是5;如果是15的倍数,权重概率就是15。

举个例子:

set = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
weighted_set=[(1, weight=1), (2, weight=1), (3, weight=3),(4, weight=1), (5, weight=5),...(15, weight=15)]
random.sample(weighted_set, N)

我该怎么做呢?谢谢。

1 个回答

4

你可以用这样的代码来给物品加权,只需要把它们多次添加到一个不同的集合里就可以了。

set = [1,2,3,4,5,6,7,8,9,10]
weight = 5
weighted_set = []
for i in set:  
    if i % 5 == 0:
        weighted_set += weight*[i]
    else:
        weighted_set += [i]

撰写回答