Skip to main content
 首页 » 编程设计

python之如何根据概率从列表中选择项目

2025年05月04日22unruledboy

我有列表 a 和 b

a = [0.1, 0.3, 0.1, 0.2, 0.1, 0.1, 0.1] 
 
b = [apple, gun, pizza, sword, pasta, chicken, elephant] 

现在我想创建一个包含 3 个项目的新列表 c

这 3 个项目是根据列表 a 中的概率从列表 b 中选择的

项目不应该在列表c中重复

例如-我正在寻找的输出

c = [gun,sword,pizza] 

或

c = [apple, pizza, pasta] 

注意 (列表 a 的所有值的总和为 1,列表 a 和 b 中的项目数相同,实际上我在列表 a 和 b 中都有一千个项目,我想根据分配给的概率从列表中选择一百个项目他们,python3)

请您参考如下方法:

使用random.choices:

>>> import random 
>>> print(random.choices( 
...     ['apple', 'gun', 'pizza', 'sword', 'pasta', 'chicken', 'elephant'],  
...     [0.1, 0.3, 0.1, 0.2, 0.1, 0.1, 0.1], 
...     k=3 
... )) 
['gun', 'pasta', 'sword'] 

编辑:为避免替换,您可以从总体中删除所选项目:

def choices_no_replacement(population, weights, k=1): 
    population = list(population) 
    weigths = list(weights)     
    result = [] 
    for n in range(k): 
        pos = random.choices( 
            range(len(population)),  
            weights, 
            k=1 
        )[0] 
        result.append(population[pos]) 
        del population[pos], weights[pos] 
    return result 

测试:

>>> print(choices_no_replacement( 
...     ['apple', 'gun', 'pizza', 'sword', 'pasta', 'chicken', 'elephant'], 
...     [0.1, 0.3, 0.1, 0.2, 0.1, 0.1, 0.1], 
...     k=3 
... )) 
['gun', 'pizza', 'sword']