Entry
Choosing random numbers with weights/probability
Jul 5th, 2000 10:02
Nathan Wallace, unknown unknown, Hans Nowak, Snippet 240, Evan Simpson
"""
Packages: maths.random
"""
"""
>I've been using the whrandom.choice routine and it's very
>useful. But is there any way to add weights or
>probabilities of being chosen to the items in the list?
>example:
>list=['one','two','three']
>item=whrandom.choice(list)
>Is there any way to say that 'one' and 'two' have a 25%
>chance of being chosen, and 'three' has a 50% chance?
In this simple case, you could use:
"""
import whrandom # added by PSST
list = ["one", "two", "three"]
weighted = [0, 1, 2, 2]
item = list[whrandom.choice(weighted)]
"""
If you really need arbitrary weights, try:
"""
list = [('one', 0.25), ('two', 0.25), ('three', 0.5)]
def weighted_choice(list):
from whrandom import uniform
n = uniform(0, 1)
for item, weight in list:
if n < weight:
break
n = n - weight
return item