Python 矩阵操作-为什么正常循环产生不同的结果?
我的问题是关于。我试图模拟他/她在回答一个常规的老式循环时提供的列表理解。下面是我的代码片段的样子:Python 矩阵操作-为什么正常循环产生不同的结果?,python,loops,matrix,list-comprehension,Python,Loops,Matrix,List Comprehension,我的问题是关于。我试图模拟他/她在回答一个常规的老式循环时提供的列表理解。下面是我的代码片段的样子: 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,4,0,0,4],而不是矩阵,即[[4,0,4],[0,4,0],[4,0,4]。我可能做错了什么 免责声明:我知道
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,4,0,0,4]
,而不是矩阵,即[[4,0,4],[0,4,0],[4,0,4]
。我可能做错了什么
免责声明:我知道有一些很棒的python库可以为numpy这样做。我喜欢通过直觉来理解事物,因此这个问题……所以请原谅我的天真。您有一个添加标量值的列表
sqd
,所以它总是一个一维列表。如果需要列表列表(即二维矩阵),则需要将列表附加到sqd
,而不是标量值:
matrix=[[2,0,2],[0,2,0],[2,0,2]]
sqd=[]
对于矩阵中的i:
row=[]#为每行创建一个新列表
对于i中的e:
row.append(e*e)#将标量追加到行列表中
sqd.追加(行)#将行追加到矩阵列表
打印(sqd)
因为您在i循环中为e的内部中的sqd
添加了数字。相反,您需要将这些数字附加到临时列表中,然后将该列表附加到sqd
matrix = [[2,0,2],[0,2,0],[2,0,2]]
sqd = []
for i in matrix:
row = []
for e in i:
row.append(e*e)
sqd.append(row)
print(sqd)
或者,作为列表理解:
matrix = [[2,0,2],[0,2,0],[2,0,2]]
sqd = [[e * e for e in row] for row in matrix]
print(sqd)
这里有两个for循环。您的外部循环正在通过矩阵的列
您的内部循环正在通过行
在进入下一列之前,内部循环将贯穿整个循环
现在您了解了这个流程,您需要看到列表“sqd”只有一个正在执行的操作。追加操作将针对内部循环的每个循环进行。通过添加最新的操作来增加该列表的每个循环
要创建您希望看到的矩阵,您需要在内部循环和外部循环之间进行更多的工作。
我建议为外部循环的每个迭代都创建一个新列表。此新列表将由内部循环追加,一旦内部循环完成,您可以将此新临时列表添加到“sqd”中。谢谢@Woodford。我一时不知所措。谢谢你@Pranav