【问题标题】:Why does the square matrix change when I loop through it?为什么我循环遍历方阵时会发生变化?
【发布时间】:2018-06-04 01:56:32
【问题描述】:

当我通过一个矩阵循环得到对角线时:

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]

我不知道为什么会这样。

【问题讨论】:

  • for a[i] in a: 是你的问题(在每次迭代中重新分配 a[0] 的元素),但由于我不知道你想做什么,我不能建议你应该如何解决它.
  • 如果您的问题得到解答,请投票,并mark the most helpful answer as accepted。您可以通过单击答案左侧的灰色复选标记将其切换为绿色来接受答案。谢谢。

标签: python list for-loop nested-lists


【解决方案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]]

a[0] 首先被重新分配给 [11,2,4],然后是 [4,5,6],最后是 [10,8,-12]。 a[1] 和 a[2] 不变。

【讨论】:

    【解决方案2】:

    假设您的列表列表表示一个方阵,请在列表推导中使用单个循环来提取对角线:

    >>> [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])
    

    这只是对上面列表理解的明确重写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2017-02-06
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多