Я не могу войти в мой желаемый формат. Мне предоставлен следующий примерный формат ввода -
3 4
1 1 1 2
3 1 1 1
1 1 1 2
2 2 2 1
1 1 2 2
1 1 2 2
Первая строка содержит значения m
и n
, m
- количество строк, а n
- количество столбцов. Каждая ячейка содержит список из двух чисел. Следовательно, следующие 2m
строки содержат n
целых чисел в каждой строке. Первые m
строк содержат 1-е число каждой ячейки. Вторая строка m
содержит 2-е число каждой ячейки.
Для данного ввода образца ячейки получают значения, такие как -
[1,2] [1,2] [1,2] [2,1]
[3,1] [1,1] [1,2] [1,2]
[1,1] [1,1] [1,2] [2,2]
Это желаемый формат, который я хочу сохранить данные в моей переменной списка matrix
.
Ниже приведен мой код для хранения данных в этом формате.
matrix = [[[0]*2]*n]*m
for i in range(0, 2):
for j in range(0, m):
temp = list(map(int, input().split()))
for k in range(0, n):
matrix[j][k][i] = temp[k]
Это должно работать правильно, но это не так. Я не могу найти проблему. Я получаю свою matrix
переменную, заполненную только 2
. В каждой ячейке 2
сохраняется.
Теперь моя matrix
переменная, хранящая эти данные,
[[[2, 2], [2, 2], [2, 2], [2, 2]],
[[2, 2], [2, 2], [2, 2], [2, 2]],
[[2, 2], [2, 2], [2, 2], [2, 2]]]
Правильные значения должны быть -
[[[1, 2], [1, 2], [1, 2], [2, 1]],
[[3, 1], [1, 1], [1, 2], [1, 2]],
[[1, 1], [1, 1], [1, 2], [2, 2]]]
Я хочу знать, где проблема в моем коде, прежде чем какие-либо альтернативные решения.
Отказ от ответственности: это не проиндексировано
То, как вы делаете свою матрицу, будет делать ссылки на один и тот же список, поэтому, когда вы его редактируете, будет также редактирование других
matrix = [[[0]*2]*n]*m
должно быть
matrix = [[[0, 0] for _ in range(n)] for _ in range(m)]
Ошибка заключается только в объявлении матрицы. Если вы это сделаете, каждый раз, когда обновляется пара, она копируется n раз, а затем снова выполняется m раз.
Если вы хотите исправить это, вы можете попробовать:
matrix = [[[0, 0] for x in range(n)] for y in range(m)]