List comprehensions performance
aleaxit at yahoo.com
Thu Sep 30 20:13:04 CEST 2004
Bengt Richter <bokr at oz.net> wrote:
> >...but if the for loop is NOT equivalent (it doesn't accumulate results
> >into a resulting list), it's still faster. As I posted:
> >kallisti:~/cb alex$ python2.4 timeit.py -s'def f():pass' 'for x in
> >xrange(999): f()'
> >1000 loops, best of 3: 1.29e+03 usec per loop
> >kallisti:~/cb alex$ python2.4 timeit.py -s'def f():pass' '[f() for x in
> >1000 loops, best of 3: 1.45e+03 usec per loop
> >the LC is paying for the building of a list of 999 references to None,
> >which the for loop easily avoids, so the for loop is much faster here.
> What if you abuse the LC so it makes an empty list? E.g.,
> [None for x in xrange(999) if f() and False]
Now tell me, is timing so HARD...?! This obfuscation times (on 2.4 and
the same old iBook as above) to 1.38e+03 usec per loop, still slower
than the plain old loop -- the if/and rigmarole costs...
More information about the Python-list