试图将矩阵旋转90度,但失败

2024-05-08 01:20:48 发布

您现在位置: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]

然而,当我打印普京时,我得到了[[]],一个所有空东西的数组,我不知道我的逻辑哪里出错了。我知道还有其他更有效的方法可以做到这一点,但我不知道我的代码是怎么错的


Tags: forsizelendefcolmatrixrowinsert
2条回答

list赋值(追加或插入)到变量(另一个列表)时,list object将被赋值或追加。因为在您将temporary列表添加到putin列表,然后清除temporary之后,添加的对象也被删除。 您需要将temporary列表中的copy添加到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]]

这里有一个简单的numpy方法:

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

rotated_90 = matrix.T[::-1]

相关问题 更多 >