Ошибка при транспонировании матрицы

matrix = [[1, 4, 6],
          [6, 0, 8],
          [2, 9, 4]]

for i in range(0, len(matrix)):
    for j in range(0, len(matrix[i])):
        tmp = matrix[i][j]
        matrix[i][j] = matrix[j][i]
        matrix[j][i] = tmp
print(matrix)

Ответы (1 шт):

Автор решения: Andy Pavlov

Проблема, что таким циклом Вы крутите сначала в одну сторону матрицу относительно диагонали, а потом обратно, когда доходите до нижнего треугольника.

Нужно транспонировать относительно диагонали. Второй цикл берем со стартом от номера элемента диагонали. Еще в if можно диагональ обернуть, чтобы ее саму на себя не менять.

matrix = [[1, 4, 6],
          [6, 0, 8],
          [2, 9, 4]]
for i in range(0, len(matrix)):
    for j in range(i, len(matrix[i])):
        if i != j:
            tmp = matrix[i][j]
            matrix[i][j] = matrix[j][i]
            matrix[j][i] = tmp
print(matrix)

Но проще это все сделать так, хотя по скорости верхний может и выиграть.

mt = list(zip(*matrix))
→ Ссылка