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

Reply via email to