On Thu, Dec 2, 2010 at 12:41 PM, raymond.hettinger
<python-check...@python.org> wrote:
> +A more general approach is to arrange the weights in a cumulative probability
> +distribution with :func:`itertools.accumulate`, and then locate the random 
> value
> +with :func:`bisect.bisect`::
> +
> +    >>> choices, weights = zip(*weighted_choices)
> +    >>> cumdist = list(itertools.accumulate(weights))
> +    >>> x = random.random() * cumdist[-1]
> +    >>> choices[bisect.bisect(cumdist, x)]
> +    'Blue'

Neat example, although it would be easier to follow if you broke that
last line into two pieces:

.>>> random_index = bisect.bisect(cumdist, x)
.>>> choices[random_index]
'Blue'

It took me a moment to remember how bisect.bisect worked, but it would
have been instant if the return value was assigned to an appropriately
named variable.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncogh...@gmail.com   |   Brisbane, Australia
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to