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