Ошибка при получении ввода в каком-либо формате и сохранении его в желаемом формате в Python

1

Я не могу войти в мой желаемый формат. Мне предоставлен следующий примерный формат ввода -

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

Я хочу знать, где проблема в моем коде, прежде чем какие-либо альтернативные решения.

  • 1
    Что вы подразумеваете под «входом»? Это содержимое какого-то файла ascii? Вы хотите импортировать это? Или это действительно должен быть введен вручную номер за номером пользователем в вашем вложенном цикле ...?
  • 0
    @SpghttCd «ввод» означает, что пользователь будет вводить ввод вручную в консоли построчно.
Показать ещё 1 комментарий
Теги:
python-3.x

2 ответа

1
Лучший ответ

Отказ от ответственности: это не проиндексировано

То, как вы делаете свою матрицу, будет делать ссылки на один и тот же список, поэтому, когда вы его редактируете, будет также редактирование других

matrix = [[[0]*2]*n]*m

должно быть

matrix = [[[0, 0] for _ in range(n)] for _ in range(m)]
1

Ошибка заключается только в объявлении матрицы. Если вы это сделаете, каждый раз, когда обновляется пара, она копируется n раз, а затем снова выполняется m раз.

Если вы хотите исправить это, вы можете попробовать:

matrix = [[[0, 0] for x in range(n)] for y in range(m)]
  • 0
    Извините, запятая там потерялась, исправила это.
  • 0
    Спасибо, это помогло. Но я должен принять другой ответ, потому что он был опубликован ранее.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню