@illaaa

Как циклом транспонировать матрицу?

Задача такая - транспонировать матрицу с помощью циклов. Код работает не правильно, не могу понять, почему. Решаю на листке поэтапно, получается правильно. Подскажите, где я завтыкал.
def transpose_matrix(matrix: list) -> list:

    m = len(matrix)
    n = len(matrix[0])
    result = [[0] * m] * n

    for row in range(m):
        for col in range(n):
            result[col][row] = matrix[row][col]

    return result

matrix = [
    [1, 2, 3],
    [4, 5, 6]
]

transpose_matrix(matrix)
>>> [[3, 6], [3, 6], [3, 6]]
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
@o5a
Когда матрица создается таким образом
result = [[0] * m] * n
ее колонки (вложенные списки) представляют собой копии, по факту все они ссылаются на один и тот же список.

Т.е. result[0] == result[1] == result[2] и т.д.

Поэтому при изменении значений в одном из списков автоматически "меняются" значения во всех списках.

При установке result[0][1] = 3 можно увидеть, что resul[1][1], result[2][1] тоже равны 3 (по факту это тот же самый список).

Чтобы избежать подобного, можно формировать матрицу так
result = [[0] * m for _ in range(n)]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы