在Python中,在一个列表理解中可以有多个迭代器,例如
[(x,y) for x in a for y in b]
对于一些合适的序列a和b,我知道Python的列表理解的嵌套循环语义。
我的问题是:理解中的一个迭代器可以引用另一个迭代器吗?换句话说:我可以有这样的东西吗:
[x for x in a for a in b]
其中外部循环的当前值是内部循环的迭代器?
举个例子,如果我有一个嵌套列表:
a=[[1,2],[3,4]]
为了达到这个结果,列表理解表达式应该是什么:
[1,2,3,4]
??(请只列出理解答案,因为这是我想找出的答案)。
发布于 2009-07-29 08:34:29
天啊,我想我找到了答案:我没有足够注意到哪个循环是内部的,哪个是外部的。列表理解应该是这样的:
[x for b in a for x in b]
为了得到想要的结果,一个当前值可以作为下一个循环的迭代器。
发布于 2009-07-29 08:36:21
用你自己的建议回答你的问题:
>>> [x for b in a for x in b] # Works fine
虽然您要求列表理解答案,但让我也指出优秀的itertools.chain():
>>> from itertools import chain
>>> list(chain.from_iterable(a))
>>> list(chain(*a)) # If you're using python < 2.6
发布于 2016-10-05 17:39:42
迭代器的顺序可能看起来有悖于直觉。
举个例子:[str(x) for i in range(3) for x in foo(i)]
让我们分解它:
def foo(i):
return i, i + 0.5
[str(x)
for i in range(3)
for x in foo(i)
]
# is same as
for i in range(3):
for x in foo(i):
yield str(x)
https://stackoverflow.com/questions/1198777
复制相似问题