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 -- http://mail.python.org/mailman/listinfo/python-list