2017-03-18 8 views
-1

Ich bin auf der Suche nach einer Python-Funktion, die es mir erlauben würde, mit einer Liste und einer bestimmten Wahrscheinlichkeit nur die Elemente zurückzugeben, die die Lotterie "passieren". Zum Beispiel:Python: wähle Element aus einer Liste nach einer bestimmten Wahrscheinlichkeit

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 

Deshalb mag ich die Funktion eine Lotterie (mit der gegebenen Wahrscheinlichkeit) für jedes Element in der Liste zu tun und es in der Ergebnisliste zu halten, wenn es in die Lotterie geht.

Gibt es eine solche Funktion in der Standardbibliothek oder sollte ich sie implementieren?

+3

zu bleiben Was ist Ihre Logik, dass die Wahrscheinlichkeit für die Beteiligung? – Kasramvd

+0

Was bedeutet 0.66? – McGrady

+0

Die Wahrscheinlichkeit, dass ein Element in der Unterliste "bleibt" – mel

Antwort

3

Es klingt wie Sie meinen, Sie wollen jedes Element wählen oder nicht wählen, mit der gegebenen Wahrscheinlichkeit. Hier sind ein paar einfache Lösungen:

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

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

Dies sieht aus wie eine klassische binomische Studie für mich.

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'] 

Oder Sie können die reinen Numpy-Weg zu gehen, wenn Sie das Endergebnis nicht brauchen eine Liste

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

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

Warum die Down-Vote? –

Verwandte Themen