问题描述
加入列表:
>>>''.join([ str(_) for _ in xrange(10) ])'0123456789'join
必须带一个可迭代对象.
显然,join
的参数是 [ str(_) for _ in xrange(10) ]
,它是一个 列表理解.
看看这个:
>>>''.join( str(_) for _ in xrange(10) )'0123456789'
现在,join
的参数只是 str(_) for _ in xrange(10)
,没有 []
,但是结果是一样的.
为什么?str(_) for _ in xrange(10)
是否也生成列表或可迭代对象?
>>>>''.join( str(_) for _ in xrange(10) )
这被称为生成器表达式,在PEP 289中有解释一>.
生成器表达式和列表推导式之间的主要区别在于前者不在内存中创建列表.
请注意,表达式还有第三种写法:
''.join(map(str, xrange(10)))
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?
>>>''.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)))
这篇关于Python中没有[]的列表理解的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!