2014-04-11 70 views
0

我試圖在順時針方向將python中的矩陣(二維列表)旋轉90度。這裏是我的代碼:嘗試在python中旋轉矩陣時輸出錯誤

def rotate(matrix): 
    length = len(matrix) 
    new_matrix = [[0]*length]*length 
    for i in range(length): 
     for j in range(length): 
      new_matrix[j][length-1-i] = matrix[i][j] 
      print("new_matrix[",j,"][", length-1-i,"]", "is", new_matrix[j][length-1-i]) 
    for i in range(length): 
     for j in range(length): 
      print(new_matrix[i][j]) 
    return new_matrix 
print(rotate([[1 ,2], [3, 4]])) 

的想法很簡單,旋轉後,用我的元素,J爲行數和列數屆時將有Ĵ,長度爲1-i的行和列數。

print語句用於驗證我做得對。我試過[[1,2],[3,4],我得到一個錯誤的答案和一個相當混亂的輸出:

new_matrix[ 0 ][ 1 ] is 1 
new_matrix[ 1 ][ 1 ] is 2 
new_matrix[ 0 ][ 0 ] is 3 
new_matrix[ 1 ][ 0 ] is 4 
4 
2 
4 
2 
[[4, 2], [4, 2]] 

這似乎在某種程度上值1和3得到了某種方式覆蓋。當我嘗試[[1,2,3],[4,5,6],[7,8,8]]和new_matrix成爲[[9, 6, 3], [9, 6, 3], [9, 6, 3]]。所以這裏肯定有問題。

任何想法爲什麼?

回答

1

在你的代碼的問題是這條線,

new_matrix = [[0]*length]*length 

這不是做你認爲 - 它實際上創造length相同內部列表清單。

喜歡的東西,這將創造獨特的內列出了以下取代它,

new_matrix = [[0]*length for _ in range(length)] 
+0

唉唉。這就是爲什麼。我以爲我找到了一個更好的方法來創建一個二維列表..謝謝! – Gnijuohz