#python #matrix #data-structures
Вопрос:
Почему я не могу определить 2d матрицу n x n в python, создав переменную и присвоив ей значение параметра матрицы? Я пишу функцию для транспонирования матрицы, но когда я это делаю:
def transpose(m):
new_matrix = m
for i in range(len(m)):
for k in range(len(m[0])):
new_matrix[i][k] = m[k][i]
return new_matrix
It returns this:
[1, 4, 7]
[4, 5, 8]
[7, 8, 9]
Примечание — Ввод только:
a = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
Но он имеет правильный вывод, когда я просто напрямую создаю такую матрицу, как эта:
def transpose(m):
new_matrix = [[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
for i in range(len(m)):
for k in range(len(m[0])):
new_matrix[i][k] = m[k][i]
return new_matrix
Output:
[1, 4, 7]
[2, 5, 8]
[3, 6, 9]
Я спрашиваю, потому что я могу получить матрицы разного размера n x n и не могу задать пустую матрицу в python. Пожалуйста, исправьте любые недоразумения, которые у меня могут возникнуть. Заранее спасибо!
Комментарии:
1.
import copy
new_matrix = copy.deepcopy(m)
Ответ №1:
Исходный вложенный список не является новым экземпляром, вам нужно клонировать список с помощью copy.deepcopy
:
from copy import deepcopy
a = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
def transpose(m):
new_matrix = deepcopy(m)
for i in range(len(m)):
for k in range(len(m[0])):
new_matrix[i][k] = m[k][i]
return new_matrix
print(transpose(a))
Выход:
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
Ответ №2:
Извините, но я не могу прокомментировать Даниэлю Хао, но есть еще один вариант:
a = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
a_transpose = list(map(list, zip(*a)))
Комментарии:
1. Пожалуйста, добавьте дополнительные сведения, чтобы расширить свой ответ, например, ссылки на рабочий код или документацию.
2. Уже есть рабочий код, и я не уверен, какая документация необходима для этого решения, поскольку это чистый python?