Questions about list-creation
kyrie at uh.cu
Mon Nov 30 21:22:12 CET 2009
On Monday 30 November 2009 12:22:17 pm Manuel Graune wrote:
> when using local variables in list comprehensions, say
> a=[i for i in xrange(10)]
> the local variable is not destroyed afterwards:
> b=list(j for j in xrange(10))
> the local variable is destroyed after use:
Actually,  and list() are not the same. For instance, list(1,2) rises an
error, while [1,2] is the list with two elements.
The comprehension is just a syntactic contruct that allows you to simplify the
creation of lists, while the list() "function" (it is a class, actually)
receives an iterable object and returns a list.
What you seem to be confused about is the construct:
(j for j in xrange(10))
That is called a generator expression, and it is very similar to the list
comprehension, except that it builds an iterator (instead of a list, i.e, the
xrange(10) is not consumed until it is needed), and the loop variable
doesn't "leak" outside.
When you do b=list(j for j in xrange(10)), you are actually doing
b=list((j for j in xrange(10)))
(note the extra set of parenthesis - python lets you ommit those), i.e, you
are calling the list() "function" with a single argument, an iterable that
contains all the elements of xrange(10). You could be calling
foobar(j for j in xrange(10))
And I think I lost my way... I'm sleepy. If I confused you, sorry... and if
I'm helped you, thank you for letting me :D.
Luis Zarrabeitia (aka Kyrie)
Fac. de Matemática y Computación, UH.
More information about the Python-list