python:按照一定的概率从列表中选择元素

时间:2017-03-18 07:57:15

标签: python python-3.x random probability

我正在寻找一个python函数,它允许我给出一个列表和一定的概率,只返回“通过”抽奖的元素。例如:

my_list = ['A', 'B', 'C']
my_probability = 0.66 # The probability for an element to stay in the list
winner = THE_RANDOM_FUNCTION(my_list, my_probability)
print(winner)
>> ['A', 'C'] # Could be a different result but that only an example

所以我希望函数为列表中的每个元素进行抽奖(具有给定的概率),并且如果它通过抽奖,则将其保留在结果列表中。

标准库中是否有这样的功能,还是应该实现它?

2 个答案:

答案 0 :(得分:4)

听起来你的意思是你要选择或不选择每个元素, 给定概率。以下是一些简单的解决方案:

filter(lambda x: random.random() < my_probability, my_list)

[x for x in my_list if random.random() < my_probability]

答案 1 :(得分:0)

对我来说这看起来像是经典的二项式试验。

In [1]: import numpy as np

In [2]: my_list = ['A', 'B', 'C']

In [3]: prob = 0.66

In [4]: mask = np.random.binomial(1, prob, len(my_list))

In [5]: selected = [elem for keep, elem in zip(mask, my_list) if keep]

In [6]: selected
Out[6]: ['A', 'B']

或者你可以去纯粹的Numpy-way,如果你不需要最终结果来保持列表

In [7]: my_arr = np.array(my_list)

In [8]: my_arr[mask.astype(bool)]
Out[8]: 
array(['A', 'B'], dtype='<U1')