[Tutor] weighted choices from among many lists

Kent Johnson kent37 at tds.net
Sat Mar 11 14:34:49 CET 2006


kevin parks wrote:
> I have several lists... and i would like to some times chose from one 
> list and for a while choose from a different list, etc.

You don't say what isn't working but I have a guess. The actual windex() 
function looks OK to me.

> def test():
> 
> 	lst_a = [ 'red', 'green', 'blue', 'orange', 'violet', 'yellow', 
> 'black', 'white' ]
> 	lst_b = ['Rottweiler', 'Beagle', 'Sheepdog', 'Collie', 'Boxer', 
> 'Terrier', 'Bulldog', 'Chihuahua', 'Retriever', 'Collie', 'Dachshund', 
> 'Doberman', 'Greyhound', 'Pug', 'Spaniel']
> 	lst_c = ['Ale', 'Lager', 'Pilsner', 'Bock', 'Porter', 'Stout']
> 	lst_d = ['fender', 'gibson', 'rickenbacker', 'guild', 'danelectro', 
> 'gretsch', 'martin', 'ibanez']
> 	x = [('lst_a', .50), ('lst_b', .25), ('lst_c', .10),('lst_d', .15)]

x is list containing the *names* of the other lists. You need to keep 
references to the lists so you can pick from them.
	x = [(lst_a, .50), (lst_b, .25), (lst_c, .10),(lst_d, .15)]

> 	i = 1
> 	while i < 100:
> 		lst = windex(x)
> 		print i, lst,

with the change above this will print the list, not its name
> 		pick = random.choice(lst)
but this will work.

If you want to be able to print the name of the list then you could 
include both the name and the actual list in x:

	x = [(('lst_a', lst_a), .50), etc...]

Kent




More information about the Tutor mailing list