Source code for direct.directutil.WeightedChoice


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