John Salerno wrote: > I'm working on another exercise now about generating random numbers for > the lottery. What I want to do is write a function that picks 5 random > numbers from 1-53 and returns them. Here's what I have so far: > > numbers = range(1, 54) > > def genNumbers(): > for x in range(5): > fiveNumbers = [] > number = random.choice(numbers) > numbers.remove(number) > fiveNumbers = fiveNumbers.append(number) > return fiveNumbers > > Other than being sort of ugly, this also has the side effect of actually > editing the original list, which I don't want since I will want to > generate more than one set of numbers. > > Is there a better way to extract a certain number of items from a list > (so maybe I don't need the for loop)? Is a list even the right type to > use, since it gets edited in place? Perhaps a set?
I would just write the function like this: def genNumbers(): shuffle_nums = numbers[:] # copy the list to preserve the orginal # order (if it matters) random.shuffle(shuffle_nums) # shuffle the entire list return shuffle_nums[:5] # return the first 5 elements Cheers, Brian -- http://mail.python.org/mailman/listinfo/python-list