задача на матрицы
Задача: На вход программе подаются два натуральных числа nn и mm, каждое на отдельной строке — количество строк и столбцов в матрице. Далее вводятся сами элементы матрицы — слова, каждое на отдельной строке; подряд идут элементы сначала первой строки, затем второй, и т.д.
Напишите программу, которая сначала считывает элементы матрицы один за другим, затем выводит их в виде матрицы.
Вводные данные:
4
2
и
швец
и
жнец
и
на
дуде
игрец
Должен вывести:
и швец
и жнец
и на
дуде игрец
код:
rows, cols = int(input()), int(input())
matrix = []
temp = []
for i in range(rows):
for j in range(cols):
temp.append(input())
matrix.append(temp)
temp.clear()
for i in matrix:
print(*i)
И так вопрос, почему после очистки temp у меня очищяется matrix?
Ответы (3 шт):
Ссылка на такую же проблему с решением
Если в кратце, то метод append не просто добавляет элемент в конец списка, а создает ссылку на нее. Вы методом clear удаляете то, на что ссылается ваша matrix. Ваш код будет работать, если изменить на это:
rows, cols = int(input("vvedite1")), int(input("vvedite2"))
matrix = []
temp = []
for i in range(rows):
for j in range(cols):
temp.append(input('vvedite'))
matrix.append(temp[:]) // изменения здесь
temp.clear()
for i in matrix:
print(i)
Как и сказал @Сергей Махнёв, все дело в том, что в matrix добавляется ссылка на массив temp. Хочу лишь предложить несколько "сокращений" решения.
rows, cols = int(input()), int(input())
matrix = []
for i in range(rows):
matrix.append([])
for j in range(cols):
matrix[i].append(input())
for i in matrix:
print(*i)
rows, cols = int(input()), int(input())
matrix = []
for i in range(rows):
matrix.append([input() for j in range(cols)])
for i in matrix:
print(*i)
rows, cols = int(input()), int(input())
matrix = [[input() for j in range(cols)] for i in range(rows)]
for i in matrix:
print(*i)
Да я понимаю, что методом append добавляются ссылки на элементы а потом они удаляются но я категорически не понимаю почему тогда этот код работает правильно
rows, cols = int(input()), int(input())
matrix = []
for i in range(rows):
temp = []
for j in range(cols):
temp.append(input())
matrix.append(temp)
for i in matrix:
print(*i)