2017-01-30 6 views
0

Ich bin ein Neuling für Python, und stieß auf ein Problem mit Matrixrotation. Im Anschluss an meinem CodeMatrix Rotation Unerwartetes Ergebnis

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) 

Das Drucker ist [4,8,12] für alle 4 Reihen !!! Ich weiß einfach nicht, wo das Problem ist

Antwort

1

Dieses Problem mit

ist
res = [[0]*row]*col 

weil Sie eine einzige Liste wiederholen col mal dieses Verhalten bekommen.

>>> 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]] 

Welches ist das gleiche wie dieses.

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

Stattdessen sollten Sie Listenverständnis verwenden, wenn Sie einen Einzeiler wünschen.

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

Oder

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

@beat mich durch eine min ;-) – Bobby

+0

Vielen Dank! Ich habe gerade irgendwo eine Nullmatrix mit [[0] * r] * c erzeugt und das Problem hier nicht erkannt –