[Tutor] cycle w/ shuffle

Hugo González Monteverde hugonz-lists at h-lab.net
Thu Apr 27 23:11:14 CEST 2006


Hi Kevin,

kevin parks wrote:
> I am trying to write a loop that iterates over a sequence and do 
> something x number of times. But sometimes i will need more events 
> (larger number x) than i have have items in the sequence, so if i need 
> more events that i have stuff in my sequence i would like to have the 
> loop reload and shuffle the deck and start all over again, reloading as 
> many times as necessary to get the number of events needed. I suppose i 
> could go around cyclically modulo the list size but i would want to 
> shuffle the deck before doing that again...
>

Why not save the iterable it in the generator, then just reuse it? You 
can copy the iterable like this:

import random
def cycle(iterable):
     saved = list(iterable)

     #notice how I saved into a list, for I could not shuffle a TUPLE!
     while True:
  	for element in saved:
  		yield element

         random.shuffle(saved)

def test():
		seq = ('one', 'two', 'three', 'four', 'five', 'six', 'seven',
'eight', 'nine', 'ten')
		loop = cycle(seq)
		count = 1
		for item in range(25):
			print count, loop.next()
			count = count + 1
#you could use enumerate() instead of manually making the loop here.
#for i, v in enumerate(loop):
#    print i, v

Hope that helps,

Hugo



if __name__ == '__main__':
	test()


More information about the Tutor mailing list