Python函数用for循环将网格“旋转”90度

2024-10-01 15:28:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图将网格顺时针旋转90度,并得出以下Python代码。在

def rotate90(grid):
    rotatedGrid = grid[:]
    for i in range (0, len(grid)):
        for j in range (0, len(grid)):
            rotatedGrid[i][j] = grid[-(j+1)][i][:]
    return rotatedGrid

在网格[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]上打印rotate90(grid)输出[['7', '4', '7'], ['8', '5', '4'], ['9', '4', '7']],而我期望的是{}。造成这种差异的原因是什么?在

(我没有将这些转换成int的原因是,最终我将使用'@'和'-'字符,而不是数字。)


Tags: 代码in网格forlenreturndefrange
2条回答

我们可以很容易地将列表lzip(*l)进行转换,然后反转子列表

def rot_90(l):
    return [list(reversed(x)) for x in zip(*l)]

rot_90([['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']])

退货

^{pr2}$

您的函数无法工作,因为您在初始化rotatedGrid时没有创建新结构。每个行的都有一个副本,但是元素是指向^{中原始元素的指针。在循环中分配时,您指向的是共享矩阵位置。在

用这个来修复它:

from copy import deepcopy

def rotate90(grid):
    rotatedGrid = deepcopy(grid)

考虑到这种变化,您的代码将生成所需的输出。在

相关问题 更多 >

    热门问题