Alcott Alcott - 2 months ago 18
Python Question

List comprehension without [ ] in Python

Joining a list:

>>> ''.join([ str(_) for _ in xrange(10) ])
'0123456789'


join
must take an iterable.

Apparently,
join
's argument is
[ str(_) for _ in xrange(10) ]
, and it's a list comprehension.

Look at this:

>>>''.join( str(_) for _ in xrange(10) )
'0123456789'


Now,
join
's argument is just
str(_) for _ in xrange(10)
, no
[]
, but the result is the same.

Why? Does
str(_) for _ in xrange(10)
also produce a list or an iterable?

NPE NPE
Answer
>>>''.join( str(_) for _ in xrange(10) )

This is called a generator expression, and is explained in PEP 289.

The main difference between generator expressions and list comprehensions is that the former don't create the list in memory.

Note that there's a third way to write the expression:

''.join(map(str, xrange(10)))
Comments