Питон: Почему я не могу определить 2d-матрицу по параметру?

#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?