Most elegant way to generate 3-char sequence

James Stroud jstroud at ucla.edu
Sat Jun 10 00:15:38 CEST 2006


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

-- 
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