在列表上复制python int值?

时间:2014-12-18 17:54:21

标签: python python-2.7

我正在尝试解决一个问题,我被要求将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]])

2 个答案:

答案 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]]