矩阵旋转意外结果

时间:2017-01-30 02:54:24

标签: python matrix

我是Python的新手,遇到了关于矩阵旋转的问题。 以下是我的代码

def rotateMatrix(matrix):
    if matrix == []:
        return []
    row, col = len(matrix), len(matrix[0])
    res = [[0]*row]*col
    for i in range(row):
        for j in range(col):
            res[col-1-j][i] = matrix[i][j]
    return res

mat = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
print rotateMatrix(mat)

所有4行的打印结果为[4,8,12]!我只是不知道问题出在哪里

1 个答案:

答案 0 :(得分:1)

此问题与

有关
res = [[0]*row]*col

因为您重复单个列表col次,所以会出现此行为。

>>> res = [[0]*3]*4
>>> res
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> res[0][0] = 1
>>> res
[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]

与此相同。

>>> x = []
>>> y = x
>>> x.append(5)
>>> x
[5]
>>> y
[5]

相反,如果你想要一个单行,你应该使用列表理解。

res = [ [ 0 for r in range(rows) ] for c in range(col) ]

或者

res = [ [ 0 ] * rows for c in range(col) ]