StopIteration in the if clause of a generator expression

Duncan Booth duncan.booth at invalid.invalid
Tue Apr 5 05:28:35 EDT 2005


Simon Brunning wrote:

> On Apr 5, 2005 2:04 AM, Raymond Hettinger <vze4rx4y at verizon.net> wrote:
>> [Steven Bethard]
>> > So do I read this right in preferring
>> >      [<x> for <y> in <z>]
>> > over
>> >      list(<x> for <y> in <z>)
>> 
>> Yes!
> 
> Why? (Serious question. I'm sure that you have a good reason - I just
> can't figure out what it is.)
> 
> The generator expression has the advantage of not leaking references
> into the enclosing namespace. What's advantage of the list comp?
> 
The list comprehension is about 15-20% faster according to timeit.py:

C:\Python24\Lib>..\python.exe timeit.py -s "t = range(1000)" "[ x for x in t]"
10000 loops, best of 3: 116 usec per loop

C:\Python24\Lib>..\python.exe timeit.py -s "t = range(1000)" "list(x for x in t)"
1000 loops, best of 3: 144 usec per loop

C:\Python24\Lib>..\python.exe timeit.py -s "t = range(100000)" "[ x for x in t]"
10 loops, best of 3: 13.9 msec per loop

C:\Python24\Lib>..\python.exe timeit.py -s "t = range(100000)" "list(x for x in t)"
10 loops, best of 3: 16.3 msec per loop

Alternatively you could just regard the list comprehension as having 
less clutter on the screen so it may be clearer.



More information about the Python-list mailing list