在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]
?? (请只列出理解答案,因为这是我想找出什么)。
Answer 1:
用自己的建议,回答你的问题:
>>> [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
Answer 2:
哎呀,我想我找到了anwser:我没有照顾有足够的了解,其循环是内,这是外。 该列表理解应该是这样的:
[x for b in a for x in b]
以获得期望的结果,是的,一个电流值可以为下一个循环迭代。
Answer 3:
我希望这可以帮助别人,因为别人a,b,x,y
没有太大的意义给我! 假设你有一个完整的句子的文字和你想的话阵列。
# Without list comprehension
list_of_words = []
for sentence in text:
for word in sentence:
list_of_words.append(word)
return list_of_words
我喜欢把列表理解为横向拉伸代码。
尝试将其分成:
# List Comprehension
[word for sentence in text for word in sentence]
Answer 4:
迭代器的顺序似乎违反直觉。
举个例子: [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)
Answer 5:
ThomasH已经加入一个很好的答案,但我想说明会发生什么:
>>> a = [[1, 2], [3, 4]]
>>> [x for x in b for b in a]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
>>> [x for b in a for x in b]
[1, 2, 3, 4]
>>> [x for x in b for b in a]
[3, 3, 4, 4]
我想Python解析列表解析由左到右。 这意味着,第一for
发生将首先执行循环。
这样做的第二个“问题”是, b
被“泄露”出来的列表理解的。 第一次成功列表解析后b == [3, 4]
Answer 6:
如果你想保持多维数组,一个应该巢阵列支架。 见下面的例子,其中一个被添加到每一个元素。
>>> a = [[1, 2], [3, 4]]
>>> [[col +1 for col in row] for row in a]
[[2, 3], [4, 5]]
>>> [col +1 for row in a for col in row]
[2, 3, 4, 5]
Answer 7:
此外,你可以只使用相同的变量将目前访问输入列表中的成员,该成员中的元素。 然而,这甚至可能会更高(名单)难以理解。
input = [[1, 2], [3, 4]]
[x for x in input for x in x]
首先for x in input
被评估,导致输入的一个成员列表,然后,Python的遍历第二部分for x in x
,在此期间的x值是通过它正在访问当前元素,则第一覆盖x
定义我们想返回。
Answer 8:
我觉得这是比较容易理解
[row[i] for row in a for i in range(len(a))]
result: [1, 2, 3, 4]
文章来源: Double Iteration in List Comprehension