【问题标题】:Index error while transposing matrix in script在脚本中转置矩阵时出现索引错误
【发布时间】:2018-11-17 09:16:08
【问题描述】:

我有一个转置方阵的程序:

matrix = [[1, 2, 4], [3, 6, 9], [6, 8, 2]]
matrix _trans = []

for i in range (len (matrix)):
     for j in range (len (matrix)):
         matrix_trans [j] [i] = matrix [i] [j]

错误:

IndexError: list index out of range

为什么会出现这个错误?

【问题讨论】:

    标签: python list matrix


    【解决方案1】:

    发生这种情况是因为matrix_trans[j][i],在第一次迭代中ji 都将为零并且matrix_trans 是一个空列表,所以matrix_trans[0] 会引发索引错误,你应该有一个副本你的第一个矩阵在strat中的维度,如下所示:

    from copy import deepcopy
    matrix = [[1, 2, 4], [3, 6, 9], [6, 8, 2]]
    matrix_trans = deepcopy(matrix)
    
    for i in range(len(matrix)):
         for j in range(len(matrix)):
             matrix_trans[j][i] = matrix[i][j]
    

    结果:

    In [41]: matrix_trans
    Out[41]: [[1, 3, 6], [2, 6, 8], [4, 9, 2]]
    
    In [42]: matrix
    Out[42]: [[1, 2, 4], [3, 6, 9], [6, 8, 2]]
    

    有关copy 模块的更多信息,请阅读Docs

    另外,请注意,对于此操作,您可以使用 Python zip。像这样:

    list(zip(*matrix))
    

    【讨论】:

      【解决方案2】:

      问题是matrix_trans 只是一个空列表,这就是为什么你不能访问任何索引,而是构建一个matrix 的副本:

      matrix = [[1, 2, 4], [3, 6, 9], [6, 8, 2]]
      matrix_trans = [x[:] for x in matrix]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-29
        • 2019-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多