2017-09-05 41 views
0

我已经写了一个脚本来顺时针旋转矩阵90度。我已经算出了算法 ,但坚持实施。为什么我的脚本正在引发TypeError:'int'对象不可订阅

def rotate(M): 
    #Let M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
    n = len(M) 
    temp = None 
    for i in range(0, n): 
     for j in range(i, n): 
      temp = M[i][j] 
      M[i][j] = M[j][i] 
      M[j][i] = temp 
    nby2 = int(n/2) 
    #error loop 
    for j in range(0, nby2): 
     for i in range(0, n): 
      temp = M[i][j]   
      M[i][j] = M[i][n - 1 - j] 
      M[i][n - 1 -j] = temp 
      #print(M[i][j], M[i][n - 1 - j]) 

    for i in M: 
     print(i) 

线temp = M[i][j]是提高TypeError: 'int' object is not subscriptable 虽然print语句错误环路返回矩阵的元素没有错误,上面的循环工作完全正常。

+0

你认为是一个'list'实际上是一个'int'。 – deceze

+1

'M [n-1 -j] = temp'将一个整数直接赋值给'M'。在下面的迭代中,'M [i]'击中了那些。 –

+0

编辑我特意把M [n - 1 - j]而不是M [i] [n - 1 - j] – faishal28

回答

1

这里是正确的soultion:

def rotate(M): 
    #Let M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
    n = len(M) 
    temp = None 
    for i in range(0, n): 
     for j in range(i, n): 
      temp = M[i][j] 
      M[i][j] = M[j][i] 
      M[j][i] = temp 
    nby2 = int(n/2) 
    #error loop 
    print(M, nby2) 
    for j in range(0, nby2): 
     for i in range(0, n): 
      temp = M[i][j]   
      M[i][j] = M[i][n - 1 - j] 
      M[i][n - 1 -j] = temp 
      #print(M[i][j], M[i][n - 1 - j]) 

    for i in M: 
     print(i) 

通知符合M[n - 1 -j][i] = temp错误。您忘记添加第二个索引,从而导致列表被替换为整数。

+0

我不同意你在这里[代码在线测试](https://repl.it/KhU0/2),它没有给出预期的结果。 – ziMtyth

+1

我刚刚解决了OP的问题,我没有触及他关于旋转矩阵的逻辑。 – Fejs

+0

我以为你打算这个答案是一个“完整”的答案,在这种情况下你是对的。 – ziMtyth

相关问题