Itertools question: how to call a function n times?

Stargaming stargaming at gmail.com
Thu Jul 19 13:03:33 EDT 2007


Matthew Wilson schrieb:
> I want to write a function that each time it gets called, it returns a
> random choice of 1 to 5 words from a list of words.
> 
> I can write this easily using for loops and random.choice(wordlist) and
> random.randint(1, 5).
> 
> But I want to know how to do this using itertools, since I don't like
> manually doing stuff like:
> 
>     phrase = list()
>     for i in random.randint(1, 5):
> 
>         phrase.append(random.choice(wordlist))
> 
> It just seems slow. 
> 
> All advice welcome.
> 
> TIA
> 
> Matt
> 

You could do it either using the previously suggested list comprehension 
way or, if you don't need to have all choices in memory at once, use 
generator expressions. They're basically like list comprehensions, 
except that you wrap them into parentheses (), not brackets [].

phrase = (random.choice(wordlist) for i in xrange(random.randint(1, 5)))

You loose the ability to slice it directly (eg. phrase[3]), though. (See 
itertools.islice for a way to do it.)

HTH,
Stargaming



More information about the Python-list mailing list