我是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]!我只是不知道问题出在哪里
答案 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) ]