Python Неожиданная перезапись 2D-массива - PullRequest
0 голосов
/ 05 мая 2020

Я упрощаю вариант использования, но, учитывая 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 голосов
/ 05 мая 2020

Я попробовал ваше решение (за вычетом лишней квадратной скобки в первой строке) и получил ваш ожидаемый результат. Поэтому вам, возможно, придется подумать о том, как создать свой входной массив.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...