2014-04-11 84 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