我正在尝试解决一个问题,我被要求将NxN矩阵旋转90度。我写了代码。但是,我遇到了问题,因为python正在交换引用而不仅仅是值。有人可以帮我弄清楚如何交换整数对象的值而不是交换引用?我在下面提供了我的代码:
def rotate90(image):
print image
n = len(image)
for i in range(n):
for j in range(n):
hold = image[i][j]
hold2 = image[j][n-i-1]
image2[i][j] = hold2
image2[j][n-i-1] = hold
return image
print rotate90([[1,2,3],[4,5,6],[7,8,9]])
答案 0 :(得分:2)
此功能将旋转NxN列表列表
def rotate(m):
return [list(reversed(ll)) for ll in zip(*m)]
在2.7和3.4中应该保持不变(处理生成器工作方式的差异)
使用zip(*m)
解压缩原始列表列表,并将每个结果列表作为zip的单独参数传递。因此以下
l = [[1,2,3],[4,5,6],[7,8,9]]
zip(*l)
相当于
zip([1,2,3], [4,5,6], [7,8,9])
答案 1 :(得分:0)
我对这里的一些答案感到有点困惑:另一个答案是将列表旋转180度而不是90度请求,而不是这样做,这就是OP想要的。所以我在下面提供自己的解决方案:
def rotate90(image):
n = len(image)
for i in range(n//2):
for j in range(i, n-i-1):
e1 = image[i][j]
e2 = image[j][n-i-1]
e3 = image[n-i-1][n-j-1]
e4 = image[n-j-1][i]
image[i][j] = e4
image[j][n-i-1] = e1
image[n-i-1][n-j-1] = e2
image[n-j-1][i] = e3
如:
>>> image = [[1,2,3], [4,5,6], [7,8,9]]
>>> rotate90(image)
>>> image
[[7, 4, 1], [8, 5, 2], [9, 6, 3]]