2017-03-18 65 views
-1

我正在寻找一个python函数,它允许我给出一个列表和一定概率,只返回“通过”彩票的元素。例如: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 

所以我希望函数做彩票(给出的概率),列表中的每一个元素,如果通过买彩票,以保持它在结果列表。

标准库中是否有这样的功能还是应该执行它?

+3

什么是你对涉及该概率逻辑是什么? – Kasramvd

+0

0.66是什么意思? – McGrady

+0

元素在子列表中“保留”的概率 – mel

回答

3

这听起来像你的意思是你要选择或不选择每个元素, 具有给定的概率。这里有几个简单的解决方案:

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

[x for x in my_list if random.random() < my_probability] 
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的路,如果你并不需要最后的结果仍然是一个列表

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

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

为什么选择了倒票? –

相关问题