Python 2D数组意外覆盖

时间:2020-05-04 23:42:49

标签: python arrays python-3.x matrix multidimensional-array

我正在简化用例,但是给定2D数组,我想用每一列的i值覆盖第一列。但是,与其覆盖单个单元格,不如覆盖每一步的整个列。

array = [[0,0,0], [0,0,0], [[0,0,0]]
for i in range(3):
    array[i][0] = i+1
    print(array)

预期输出:

[[1,0,0], [0,0,0], [[0,0,0]]
[[1,0,0], [2,0,0], [[0,0,0]]
[[1,0,0], [2,0,0], [[3,0,0]]

实际输出:

[[1,0,0], [1,0,0], [1,0,0]]
[[2,0,0], [2,0,0], [2,0,0]]
[[3,0,0], [3,0,0], [3,0,0]]

我怀疑调用range()会以某种方式实现此效果,但我不知道为什么。请帮助说明为什么每次访问单个单元格都会覆盖整列!

1 个答案:

答案 0 :(得分:0)

我尝试了您的解决方案(减去第一行中的多余方括号),并且您得到了预期的结果。因此,您可能不得不考虑如何构建输入数组。

input_array = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
for i in range(3):
    input_array[i][0] = i + 1
    print(input_array)

Demonstration

另一个答案相同的解决方案:

input_array = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
for (i, line) in enumerate(input_array):
    line[0] = i + 1
    print(input_array)

Other demonstration