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