Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python函数使用for循环将网格“旋转”90度_Python_List_For Loop - Fatal编程技术网

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

Python函数使用for循环将网格“旋转”90度,python,list,for-loop,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 在网格上打印rotate90grid['1'

我正试图将网格顺时针“旋转”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
在网格上打印rotate90grid['1','2','3'],['4','5','6'],['7','8','9']]输出['7','4','7'],['8','5','4'],['9','4','7'],['4','1'],['8','5','2'],['9','6','3']。造成这种差异的原因是什么


我没有将它们转换为整数的原因是,最终我将使用“@”和“-”字符而不是数字。

我们可以轻松地将列表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']]

我们可以很容易地用zip*l转换列表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']]

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

用以下方法修复它:

from copy import deepcopy

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

在这种情况下,您的代码将生成所需的输出。

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

用以下方法修复它:

from copy import deepcopy

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

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

如果有重复,我很抱歉,但我的代码的关键行看起来与第一个解决方案的几乎相同,但我的代码似乎不起作用。网格将很小,所以使用On^2算法就可以了。很抱歉我错过了。下次我会更努力地搜索,然后再问。我接受的答案可能会添加一些新的内容,虽然我确信它在其他地方,但可能不在复制线程上。如果有重复,我很抱歉,但我的代码的关键行看起来与第一个解决方案的几乎相同,但我的似乎不起作用。网格将很小,所以使用On^2算法就可以了。很抱歉我错过了。下次我会更努力地搜索,然后再问。我接受的答案可能会增加一些新的东西,虽然我肯定它在别处,但可能不会在复制线程上。知道这一点很好。我以前从未遇到过“zip”,因为我对Python还是相当陌生的。出于好奇,你知道为什么我的函数不起作用吗?zip非常有用。当你有时间的时候,你应该检查一下文档:是的,我当然应该。特别是当我即将参加一场信息学奥林匹克运动会的时候,我不应该不必要地胡乱摸索!很高兴知道。我以前从未遇到过“zip”,因为我对Python还是相当陌生的。出于好奇,你知道为什么我的函数不起作用吗?zip非常有用。当你有时间的时候,你应该检查一下文档:是的,我当然应该。特别是当我即将参加一场信息学奥林匹克运动会的时候,我不应该不必要地胡乱摸索!谢谢你的解释。我以为[:]复制了一份。为什么在这种情况下不起作用?@PeterW[:]确实复制列表,但=将引用从源分配到目标。检查问题以了解更多细节上的差异。[:]是一个浅显的副本。谢谢你的解释,这里面有一个很好的解释。我以为[:]复制了一份。为什么在这种情况下不起作用?@PeterW[:]确实复制列表,但=将引用从源分配到目标。检查问题以了解更多细节上的差异。[:]是一个浅显的副本。这里面有一个很好的解释