James Stroud wrote: > Rob Cowie wrote: > >>Hi all, >> >>I wish to generate a sequence of the form 'aaa', 'aab', aac'.... 'aba', >>'abb', 'abc' etc. all the way to 'zzz'. >> >>How would you construct a generator to acheive this? >> >>A simple, working but somewhat inelegant solution is... >> >>alpha = ['a','b','c','d'] #shortened for brevity >>alpha2 = ['a','b','c','d'] >>alpha3 = ['a','b','c','d'] >> >>def generator(): >> for char in alpha: >> for char2 in alpha2: >> for char3 in alpha3: >> yield char + char2 + char3 >> >>x = generate() >>x.next() # etc, etc, etc, >> > > > A touch more efficient: > > import string > alpha = string.lowercase > > def generator(choices, length): > length -= 1 > for a in choices: > if length: > for g in generator(choices, length): > yield a + g > else: > yield a > > for a in generator(alpha, 3): > print a > Frankly, this doesn't seem more elegant than the original, particularly once it uses a single string.
regards Steve -- Steve Holden +44 150 684 7255 +1 800 494 3119 Holden Web LLC/Ltd http://www.holdenweb.com Love me, love my blog http://holdenweb.blogspot.com Recent Ramblings http://del.icio.us/steve.holden -- http://mail.python.org/mailman/listinfo/python-list