Пытаюсь повернуть матрицу на 90 градусов, но не получается

#python

Вопрос:

 def rotate_ninety(matrix):
    putin = []
    temporary = []
    row_size = len(matrix)
    col_size = len(matrix[0])
    ccount = col_size-1
    putin_idx = 0
    while ccount > -1:
        for i in range(row_size):
            temporary.insert(i, matrix[i][ccount])

        putin.insert(putin_idx, temporary)
        ccount = ccount -1
        temporary.clear()
        putin_idx  = 1

    print(putin)
    return 0
 

Итак, если бы у меня был вклад

 [1,2,3]
[4,5,6]
[7,8,9]
 

Результат должен быть:

 [3,6,9]
[2,5,8]
[1,4,7]
 

Однако, когда я печатаю путина, я получаю [[] [] []], массив всех пустых вещей, которые я не понимаю, где моя логика пошла не так. Я знаю, что есть другие более эффективные способы сделать это, но я не вижу, как мой код ошибочен

Комментарии:

1. уважаемый вопрошатель, пожалуйста, проверьте и мой ответ тоже.

2. привет, бехдад, спасибо за твой ответ :). Что-то подобное было именно тем, что я искал, спасибо за вашу помощь

3. Добро пожаловать, @questionaire 😄. Если это тот ответ, который вы искали, я буду очень рад, если вы выберете его в качестве правильного ответа ✅ Ура. 💙

Ответ №1:

Когда вы назначаете (добавляете или вставляете) a list переменной (другому списку), list object она будет назначена или добавлена. Так как после добавления temporary списка в putin список , а затем очистки temporary ,добавленный объект также был удален. Вам нужно добавить copy часть temporary списка в putin , вот так:

 import copy

def rotate_ninety(matrix):
    putin = []
    temporary = []
    row_size = len(matrix)
    col_size = len(matrix[0])
    ccount = col_size-1
    putin_idx = 0
    while ccount > -1:
        for i in range(row_size):
            temporary.append(matrix[i][ccount])
        putin.append(copy.copy(temporary))
        ccount = ccount -1
        temporary.clear()
        putin_idx  = 1

    print(putin)
    return 0

matrix = [[1,2,3],[4,5,6],[7,8,9]]
rotate_ninety(matrix)
 

И результат будет:
[[3, 6, 9], [2, 5, 8], [1, 4, 7]]

Ответ №2:

Вот простой способ с numpy:

 matrix = np.arange(1,10).reshape((3,3))

rotated_90 = matrix.T[::-1]