Ivan Voras wrote: > I have a list of items, and need to choose several elements from it, > "almost random". The catch is that the elements from the beginning > should have more chance of being selected than those at the end (how > much more? I don't care how the "envelope" of probability looks like at > this point - can be linear). I see that there are several functions in > Python standard libraries for various distribution, but is there an easy > pythonic way to make them do what I need?
import random def choose(samples, **kwargs): total = sum(kwargs.values()) result = [] for n in range(samples): choice = random.random() * total for key, weight in kwargs.iteritems(): choice -= weight if choice <= 0: result.append(key) total -= kwargs.pop(key) break else: raise ValueError('Too many samples taken from the universe') return result print choose(3, a=1, b=2, c=2, d=1, e=3) -Scott David Daniels [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list