2017-01-30 53 views
0

我爲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,8,12]所有4行!我只是不知道問題出在哪裏

回答

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] 

相反,如果你想要一個班輪,你應該使用list comprehension。

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

或者

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

@beat我被分;-) – Bobby

+0

非常感謝!我剛剛看到某處用[[0] * r] * c生成零矩陣,並沒有意識到這裏存在的問題 –