首页 > 解决方案 > 矩阵操作 - 为什么正常循环会产生不同的结果?

问题描述

我的问题与这个问题有关。我试图 在他/她对常规老式循环的问题的回答中对@shuttle87提供的列表理解进行建模。这是我的代码片段的样子:

matrix = [[2,0,2],[0,2,0],[2,0,2]]
sqd = []
for i in matrix:
    for e in i:
        sqd.append(e*e)
print(sqd)

我的问题是我的代码返回一个列表,[4, 0, 4, 0, 4, 0, 4, 0, 4]而不是矩阵,即[[4, 0, 4], [0, 4, 0], [4, 0, 4]]。我可能做错了什么?

免责声明:我知道有很棒的 python 库可以做到这一点,例如 numpy。我喜欢通过直觉理解事物,因此这个问题......所以请原谅我的天真。

标签: pythonloopsmatrixlist-comprehension

解决方案


您有一个sqd要附加标量值的列表,因此它始终只是一个一维列表。如果您想要一个列表列表(即二维矩阵),您需要将列表附加到sqd,而不是标量值:

matrix = [[2,0,2],[0,2,0],[2,0,2]]
sqd = []
for i in matrix:
    row = []  # create a new list for each row
    for e in i:
        row.append(e*e)  # append scalar to the row list
    sqd.append(row)  # append row to matrix list
print(sqd)

推荐阅读