simple recursion help

Alex Martelli aleaxit at yahoo.com
Sun Oct 24 04:26:28 EDT 2004


Stephen Waterbury <golux at comcast.net> wrote:

> Hung Jung Lu wrote:
> > ...  The functional version would be:
> > 
> > strings = lambda Xs, k: reduce(lambda r, i: [p + x for p in r for x
> > in Xs], range(k), [''])
> 
> Wow!  Grand prize for elegance.  :)

And almost for performance -- it's an order of magnitude faster than
other ones I've timed.  Of course, as usual, you can get another 10% or
so if you avoid reduce and lambda, implementing exactly the same
algorithm as:

def stringo(Xs, k):
    r = ['']
    for i in range(k):
        r = [p+x for p in r for x in Xs]
    return r

$ python -m timeit -s'import ov' 'ov.strings("abc",3)'
10000 loops, best of 3: 144 usec per loop
$ python -m timeit -s'import ov' 'ov.strings("abc",3)'
10000 loops, best of 3: 142 usec per loop

$ python -m timeit -s'import ov' 'ov.stringo("abc",3)'
10000 loops, best of 3: 126 usec per loop
$ python -m timeit -s'import ov' 'ov.stringo("abc",3)'
10000 loops, best of 3: 125 usec per loop


Alex



More information about the Python-list mailing list