Python 2D数组意外覆盖

问题描述 投票:0回答:1

我正在简化用例,但考虑到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()会以某种方式实现此效果,但我不知道为什么。请帮助解释为什么每次访问单个单元格都会覆盖整列!

python arrays python-3.x matrix multidimensional-array
1个回答
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)

“示范”

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

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)

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLmltZ3VyLmNvbS9NdnRsNHN3LnBuZyJ9” alt =“其他演示”>

© www.soinside.com 2019 - 2024. All rights reserved.