当我通过矩阵循环以获得对角线时:
a = [[11, 2, 4],
[4, 5, 6],
[10, 8, -12]]
i = 0
o = 0
for a[i] in a:
d1 = a[i][o]
o += 1
print(d1)
输出与预期的11, 5, -12
相似
但是当我再次打印矩阵时:
print(a)
矩阵改变了
[[10, 8, -12], [4, 5, 6], [10, 8, -12]]
第一行不再像[11, 2, 4]
那样。
我无法弄清楚为什么会这样。
答案 0 :(得分:1)
假设您的列表列表代表方形矩阵,请在列表解析中使用单个循环来提取对角线:
>>> [a[i][i] for i in range(len(a))]
[11, 5, -12]
我不确定您在哪里遇到此for a[i] in a
语法,但这并不符合您的想法。它最终将第0个元素重新分配给for循环迭代的任何副作用,所以不要这样做。
顺便说一下,修复你的代码就是:
d = []
for i in range(len(a)):
d.append(a[i][i])
这只是对上面列表理解的明确重写。
答案 1 :(得分:1)
您正在将a的每个元素分配给a的第一个元素。请参阅以下代码。
for a[0] in a:
print(a)
这会产生:
[[11, 2, 4], [4, 5, 6], [10, 8, -12]]
[[4, 5, 6], [4, 5, 6], [10, 8, -12]]
[[10, 8, -12], [4, 5, 6], [10, 8, -12]]
首先将[0]重新分配给[11,2,4],然后重新分配到[4,5,6],最后重新分配到[10,8,-12]。 a [1]和[2]不变。