string goes away

Skip Montanaro skip at pobox.com
Thu Mar 31 22:37:11 EST 2005


    Andreas> Yeeh, I was expecting something like that. The only reason to
    Andreas> use map() at all is for improving the performance.  That is
    Andreas> lost when using list comprehensions (as far as I know). So,
    Andreas> this is *no* option for larger jobs.

Did you test your hypothesis?

    % python -m timeit -s 'lst = ("abc"*10).split() ; import string' 'map(string.upper, lst)'
    100000 loops, best of 3: 9.24 usec per loop
    % python -m timeit -s 'lst = ("abc"*10).split()' '[s.upper() for s in lst]'
    100000 loops, best of 3: 4.18 usec per loop
    % python -m timeit -s 'lst = ("abc"*100).split() ; import string' 'map(string.upper, lst)'
    100000 loops, best of 3: 16.1 usec per loop
    % python -m timeit -s 'lst = ("abc"*100).split()' '[s.upper() for s in lst]'
    100000 loops, best of 3: 10.8 usec per loop
    % python -m timeit -s 'lst = ("abc"*1000).split() ; import string' 'map(string.upper, lst)'
    10000 loops, best of 3: 72.7 usec per loop
    % python -m timeit -s 'lst = ("abc"*1000).split()' '[s.upper() for s in lst]'
    10000 loops, best of 3: 67.7 usec per loop
    % python -m timeit -s 'lst = ("abc"*10000).split() ; import string' 'map(string.upper, lst)'
    1000 loops, best of 3: 844 usec per loop
    % python -m timeit -s 'lst = ("abc"*10000).split()' '[s.upper() for s in lst]'
    1000 loops, best of 3: 828 usec per loop

    % python -m timeit -s 'lst = ["abc"*10]*10 ; import string' 'map(string.upper, lst)'
    10000 loops, best of 3: 42.7 usec per loop
    % python -m timeit -s 'lst = ["abc"*10]*10' '[s.upper() for s in lst]'
    10000 loops, best of 3: 26.5 usec per loop
    % python -m timeit -s 'lst = ["abc"*10]*100 ; import string' 'map(string.upper, lst)'
    1000 loops, best of 3: 376 usec per loop
    % python -m timeit -s 'lst = ["abc"*10]*100' '[s.upper() for s in lst]'
    1000 loops, best of 3: 230 usec per loop
    % python -m timeit -s 'lst = ["abc"*10]*1000 ; import string' 'map(string.upper, lst)'
    100 loops, best of 3: 3.72 msec per loop
    % python -m timeit -s 'lst = ["abc"*10]*1000' '[s.upper() for s in lst]'
    100 loops, best of 3: 2.23 msec per loop

The above results are using Python CVS (aka 2.5a0).

Skip



More information about the Python-list mailing list