首页 > 解决方案 > 没有numpy的矩阵转置,错误:列表索引超出范围

问题描述

我想做一个矩阵的转置。我不想使用 numpy。我收到以下错误(以下代码)。任何帮助表示赞赏

    matrix = [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]

    transposed = []

    for i in range(7):
        new=[]
        for row in matrix:
            new.append(row[i])
        transposed.append(lst)
    print(transposed)

错误:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-106-856d3ec27942> in <module>()
      6     new=[]
      7     for row in matrix:
----> 8         new.append(row[i])
      9     transposed.append(lst)
     10 print(transposed)

IndexError: list index out of range

标签: pythonpython-3.x

解决方案


您可以transpose使用一个很酷的衬里列出列表zip,并且*unpacking

m = [[1, 1, 1, 1, 1, 1, 1], [2, 2, 2, 2, 2, 2, 2], [3, 3, 3, 3, 3, 3, 3]]
list(zip(*m))

输出:

[(1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3)]

推荐阅读