循环不应该在矩阵中附加一个、两个、三个数字吗?


def matrixInput():
matrix=[]
print("Enter the elements row-wise: ")
for i in range(0,3):
a = []
for j in range(0,3):
a.append(int(input()))
matrix.append(a) #this line should have been back one tab, this was a typo mistake...however left like this, the code is running in an unexpected way
print((matrix))

print(matrixInput())
#this code's output:
Enter the elements row-wise: 
1
2
3
4
5
6
7
8
9
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [4, 5, 6], [4, 5, 6], [4, 5, 6], [7, 8, 9], [7, 8, 9], [7, 8, 9]]
None
#shouldn't it print:
#[[1],[1,2],[1,2,3],[4],[4,5],[4,5,6],[7],[7,8][7,8,9]]...??

所以我是UNI第一年的新开发人员。在完成一个实验室时,我犯了一个打字错误,导致了一个奇怪的输出。我纠正了这个错误,但我仍然对拼写错误的结果感兴趣。它产生了意想不到的结果。我想了好几天了,就是不明白为什么结果和我预期的不一样。

#我缺少什么???

将数组的变量视为内存位置,类似于引用。当您添加数组"时;a";对于matrix,matrix数组只记住a的地址,因为您将数据附加到";a";并对";a";,矩阵中引用"0"的前一索引;a";实际上发生了变化。在第一循环中,每次迭代都重置数组"的存储器;a";,因此只有阵列"的3个拷贝;a";保存在矩阵中。

假设当您设置a=[]时,我们有一个新的内存位置用于a,我们总共有a、a2和a3。循环结束时的矩阵数组具有值[a,a,a,a2,a2,a3,a3],因为您在所有迭代后打印最终结果,所以每个a、a2、a3引用的值都是相同的。

如果你觉得很难理解,试着运行这个代码

matrix = []
a = []
a.append(2)
matrix.append(a)   # matrix has [a]   a = [2]
print(matrix)      # matrix prints as [2]
a.append(3)
matrix.append(a)   # matrix has [a,a] a = [2,3]
print(matrix)      # matrix prints as [[2,3],[2,3]] instead of [[2],[2,3]], because matrix only knows [a,a] and a is [2,3] when this line is called

最新更新