Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 矩阵操作-为什么正常循环产生不同的结果?_Python_Loops_Matrix_List Comprehension - Fatal编程技术网

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