Das klingt wie ein Job für Numpy's numpy.random.choice()
und seine p
Parameter:
p : 1-D array-like, optional
The probabilities associated with each entry in a. If not given,
the sample assumes a uniform distribtion over all entries in a.
Also, wenn es nur eine Liste (wo ein Element sowohl die Wahrscheinlichkeit jedes Element ist, und das Element selbst ausgewählt werden, können Sie es folgendermaßen tun:
from numpy.random import choice
elementsAndProbabilities = [0.1, 0.2, 0.4, 0.2, 0.1]
randomElement = choice(elementsAndProbabilities, p=elementsAndProbabilities)
print randomElement
Wenn Sie eine Liste von Elementen und eine Liste von Wahrscheinlichkeiten für jedes Element (separat) haben, können Sie es wie folgt tun:
from numpy.random import choice
elements = ["first", "second", "third", "fourth", "fifth"]
probabilities = [0.1, 0.2, 0.4, 0.2, 0.1]
randomElement = choice(elements, p=probabilities)
print randomElement
Nun Sie sagen, Sie den Index, nicht das Element wollen, so wir können den Index wie diese:
from numpy.random import choice
probabilities = [0.1, 0.2, 0.4, 0.2, 0.1]
randomElement = choice(range(len(probabilities)), p=probabilities)
print randomElement
ich denke, das ist das, was Sie suchen: http://stackoverflow.com/questions/10803135/weighted-choice-short-and-simple – Akavall
kein Duplikat. Die Frage hat einige unterschiedliche Einzelheiten. – Will