Python函数使用for循环'旋转'网格90度

时间:2018-01-05 15:38:40

标签: python list for-loop

我正在尝试顺时针旋转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']]输出[['7', '4', '7'], ['8', '5', '4'], ['9', '4', '7']]上打印rotate90(网格),而我预计[['7', '4', '1'], ['8', '5', '2'], ['9', '6', '3']]。这种差异的原因是什么?

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

2 个答案:

答案 0 :(得分:4)

您的功能不起作用,因为您在初始化Detect if process has run passed a certain time. TASKKILL notepad.exe goto END :END START notepad.exe 时未创建新结构。您制作了每个的副本,但这些元素是指向rotatedGrid中原始内容的指针。在循环中分配时,您指向共享矩阵位置。

修复此问题:

grid

鉴于此更改,您的代码会生成所需的输出。

答案 1 :(得分: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']])

返回

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