我正在尝试顺时针旋转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']]
。这种差异的原因是什么?
(我没有将这些转换为整数的原因是最终我会使用'@'和' - '字符而不是数字。)
答案 0 :(得分:4)
您的功能不起作用,因为您在初始化Detect if process has run passed a certain time.
TASKKILL notepad.exe
goto END
:END
START notepad.exe
时未创建新结构。您制作了每个行的副本,但这些元素是指向rotatedGrid
中原始内容的指针。在循环中分配时,您指向共享矩阵位置。
修复此问题:
grid
鉴于此更改,您的代码会生成所需的输出。
答案 1 :(得分:2)
我们可以轻松地将列表l
与zip(*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']]