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

python:按照一定的概率从列表中选择元素,python,python-3.x,random,probability,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 b

我正在寻找一个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
因此,我希望函数对列表中的每个元素进行抽签(以给定的概率),如果通过抽签,则将其保留在结果列表中


标准库中有这样的函数吗?或者我应该实现它吗?

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

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

[x for x in my_list if random.random() < my_probability]
过滤器(lambda x:random.random()
听起来您的意思是要选择或不选择每个元素, 以给定的概率。以下是几个简单的解决方案:

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

[x for x in my_list if random.random() < my_probability]
过滤器(lambda x:random.random()
在我看来,这是一个经典的二项试验

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方式

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

In [8]: my_arr[mask.astype(bool)]
Out[8]: 
array(['A', 'B'], dtype='<U1')
[7]中的
:my\u arr=np.array(my\u列表)
在[8]:my_arr[mask.astype(bool)]
出[8]:

数组(['A','B',dtype='对我来说,这看起来像是一个经典的二项试验

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方式

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

In [8]: my_arr[mask.astype(bool)]
Out[8]: 
array(['A', 'B'], dtype='<U1')
[7]中的
:my\u arr=np.array(my\u列表)
在[8]:my_arr[mask.astype(bool)]
出[8]:

数组(['A','B',dtype=”你的逻辑是什么?0.66意味着什么?元素“停留”在数组中的概率sublist@McGrady0.66意味着66/100。或者33/50。我猜,OP意味着一个二项试验。你的逻辑是什么?0.66意味着什么?一个元素“停留”的概率在sublist@McGrady0.66意味着66/100。或者33/50。我想,OP意味着二项试验。