Как заполнить нулевую матрицу натуральными числами от 0
Я заполнила матрицу нулями по заданным n и m. Далее создала цикл с вложенным циклом, где счетчик прибавляет единицу каждому элементу в строке. Но почему-то при выводе матрицы он сохранил во всех строках одинаковые элементы. В чем у меня ошибка?
n, m = map(int, input().split())
a = []
tmp = [0] * m
for i in range(n):
a.append(tmp)
for i in a:
print(i)
с = 0
for i in range(n):
for j in range(m):
a[i][j] = с
с += 1
for i in a:
for j in i:
print(j, end = ' ')
print()
Возвращает такое:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
30 31 32 33 34 35 36 37 38 39
30 31 32 33 34 35 36 37 38 39
30 31 32 33 34 35 36 37 38 39
30 31 32 33 34 35 36 37 38 39
Ответы (1 шт):
Автор решения: Iofakh
→ Ссылка
Проблема в принципе генерации матрицы:
Замените вот это:
a = []
tmp = [0] * m
for i in range(n):
a.append(tmp)
for i in a:
print(i)
на вот это:
a = [ [0 for j in range(m)] for i in range(n)]
в вашем коде матрица a состоит из n строк tmp:
for i in range(n):
a.append(tmp)
и когда вы изменяете по координатам a[i][j] = с матрицу, фактически вы изменяете список tmp, поэтому вы изменяете все строки матрицы, каждая из которых является tmp.