Most elegant way to generate 3-char sequence

John Machin sjmachin at lexicon.net
Fri Jun 9 18:33:16 EDT 2006


On 10/06/2006 7:49 AM, 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...

You're not wrong.

> 
> alpha = ['a','b','c','d'] #shortened for brevity

Hope you remember the alphabet correctly.
Why type all that punctuation?
Any reason this cruft is global (i.e. not local to the generator)?

> alpha2 = ['a','b','c','d']
> alpha3 = ['a','b','c','d']

Hope you get the redundant copy/paste right.

> 
> def generator():
>   for char in alpha:

Why stop at two spaces? One-space indentation is syntactically correct :-)

>     for char2 in alpha2:
>       for char3 in alpha3:
>         yield char + char2 + char3
> 
> x = generate()

Did you meant "generator"?

> x.next() # etc, etc, etc,
> 

|>> def generator():
...     import string
...     alpha = string.ascii_lowercase
...     for char in alpha:
...         for char2 in alpha:
...             for char3 in alpha:
...                 yield char + char2 + char3
...
|>> x = generator()
|>> the_lot = list(x)
|>> len(the_lot) == 26 ** 3
True
|>> [the_lot[i] for i in (0, 1, 25, 26, -27, -26, -1)]
['aaa', 'aab', 'aaz', 'aba', 'zyz', 'zza', 'zzz']

Cheers,
John



More information about the Python-list mailing list