Generator expressions v/s list comprehensions
Nicolas Lehuen
nicolas at lehuen.com
Wed Sep 1 04:36:57 EDT 2004
python at rcn.com (Raymond Hettinger) wrote in message news:<5d83790c.0408311434.3cc38c24 at posting.google.com>...
> [Mahesh Padmanabhan]
> > Now I see that generator expressions have been added to the language
> > with 2.4 and I question the need for it. I know that it allows for lazy
> > evaluation which speeds things up for larger lists but why was it
> > necessary to add it instead of improving list comprehension?
>
> FWIW, we improved list comprehensions too. They run much faster now.
>
>
> Raymond
IIRC, list constructors and list comprehensions now use the length of
the underlying sequence (if it defines __len__) to preallocate its
internal array.
Thus, the list comprehension is theoritically more efficient in this
case :
[x for x in range(100000)] vs [x for x in xrange(100000)]
So [x for x in whatever] may be preferable to list(x for x in
whatever) if you don't know what 'whatever' is and it happens in
define __len__.
BTW, I guess this is no longer true with an if statement :
[x for x in range(100000) if x%2==0] may be less efficient than [x for
x in xrange(100000) if x%2==0]
Regards,
Nicolas Lehuen
More information about the Python-list
mailing list