Most elegant way to generate 3-char sequence

James Stroud jstroud at ucla.edu
Sat Jun 10 19:32:16 EDT 2006


Steve Holden wrote:
> 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

Are you sure you understand what each do?

-- 
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095

http://www.jamesstroud.com/



More information about the Python-list mailing list