【发布时间】:2014-03-24 08:20:22
【问题描述】:
为什么下面的列表理解表达式不起作用?
[col1*col2 for (col1, col2) in zip(row1, row2) for (row1, row2) in zip(M,N)]
Python 说:
NameError: name 'row1' is not defined
与:
M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
N = [[2, 2, 2], [3, 3, 3], [4, 4, 4]]
【问题讨论】:
-
您在告诉解释器之前引用了
row1和row2。 -
[col1*col2 for (row1, row2) in zip(M,N) for (col1, col2) in zip(row1, row2)]试试这个理解 -
啊,我明白了,for 语句应该按倒序排列。谢谢
-
@jAckOdE 实际上是 you 向后编写了循环。列表理解的想法是
[x for y in A for z in B]代表循环:for y in A: for z in B: the_list.append(x)。不知道为什么您认为等效语句应该交换循环。 -
@Bakuriu 因为与循环相比,整个事情是交换的,所以人们可能会想在理解中嵌套
for语句的顺序也是一样的。
标签: python