Dangerous behavior of list(generator)

Ned Deily nad at acm.org
Sat Dec 12 21:01:24 EST 2009


In article 
<ec96e1390912121653w56c3dbe3p859a7b979026bf47 at mail.gmail.com>,
 Benjamin Kaplan <benjamin.kaplan at case.edu> wrote:
> On Sat, Dec 12, 2009 at 7:15 PM, Tom Machinski <tom.machinski at gmail.com> 
> wrote:
> > In most cases, `list(generator)` works as expected. Thus,
> > `list(<generator expression>)` is generally equivalent to `[<generator
> > expression>]`.
> Actually, it's list(generator) vs. a list comprehension. I agree that
> it can be confusing, but Python considers them to be two different
> constructs.
> 
> >>> list(xrange(10))
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
> >>> [xrange(10)]
> [xrange(10)]

That's not a list comprehension, that's a list with one element.

>>> [x for x in xrange(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

<CrocodileDundee> Now *that's* a list comprehension. </CrocodileDundee>

-- 
 Ned Deily,
 nad at acm.org




More information about the Python-list mailing list