import random
# DCR: I added a weightedChoice() function to PythonUtil that supports
# floating-point weights and is intended for one-shot choices. It
# has an optional 'sum' argument that you can pass in if you know the
# sum of the weights and want to make repeated choices.
[docs]class WeightedChoice:
[docs] def __init__(self, listOfLists, weightIndex=0):
t=0
for i in listOfLists:
t+=i[weightIndex]
self.total = t
self.listOfLists = listOfLists
self.weightIndex = weightIndex
[docs] def choose(self, rng=random):
roll = rng.randrange(self.total)
weight = self.weightIndex
for i in self.listOfLists:
roll -= i[weight]
if roll <= 0:
return i