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... so i cooked this up and it almost works so that i can get colors 50% of the time, doggies 25%, beer 10%, and guitars 100% (if i was real smart i would make my index thingy check to make sure my wieghets added up to 100% or scaled them to be..... ) ... meanwhile, as you can see i am 90% of the way there, can anyone figure out what i got wrong or suggest improvements to the code...
best, -kevin-- #!/usr/bin/env python import random def windex(lst): '''a random.choose() function that makes weighted choices accepts a list of tuples with the item and probability as a pair like: >>> x = [('one', 0.25), ('two', 0.25), ('three', 0.5)] >>> y=windex(x)''' n = random.uniform(0, 1) for item, weight in lst: if n < weight: break n = n - weight return item 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)] i = 1 while i < 100: lst = windex(x) print i, lst, pick = random.choice(lst) print pick i = i + 1 if __name__ == "__main__": test() _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor