Incrementing a string

exarkun at divmod.com exarkun at divmod.com
Wed Sep 15 23:52:49 EDT 2004


On Wed, 15 Sep 2004 15:08:20 -0700, John Velman <velman at cox.net> wrote:
> [snip]
> 
> In Python I can get from a to z with a generator as so:
> 
> >>> def gen_alph():
> ...     for i in range(97,123):
> ...         yield chr(i)
> ...
> >>> g = gen_alph()
> >>> g.next()
> 'a'
> >>> g.next()
> 'b'
> >>> g.next()
> 'c'
> 
> But it looks like going beyond z to aa and so on is (relatively) complicated.

  Not so complicated...  Here's how I might do it:

>>> def permute(s, n):
...     if n == 0:
...         yield ''
...     else:
...         for ch in s:
...             for rest in permute(s, n - 1):
...                 yield ch + rest
...
>>> def labels(s):
...     length = 1
...     while True:
...         for lab in permute(s, length):
...             yield lab
...         length += 1
...
>>> import itertools
>>> print list(itertools.islice(labels('abc'), 0, 20))
['a', 'b', 'c', 'aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc', 'aaa', 'aab', 'aac', 'aba', 'abb', 'abc', 'aca', 'acb']

  Jp



More information about the Python-list mailing list