为什么这句话不起作用?

时间:2014-03-24 08:20:22

标签: python

为什么以下列表理解表达式不起作用?

[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]]

1 个答案:

答案 0 :(得分:1)

确实,row1未定义,row2也是如此。

让我们简化您实际尝试做的事情:

for row1, row2 in zip(M, N):
    for col1, col2 in zip(row1, row2):
        result = col1*col2
        print result

上述代码运行正常,因为我们首先从row1选择了row2zip(M, N)。然后我们从col1中选择了col2zip(row1, row2)

因此,如果您想在一行中压缩代码,必须采用与上述相同的方法。所以你的代码看起来如下所示:

[col1*col2 for (row1, row2) in zip(M, N) for (col1, col2) in zip(row1, row2)]