2

我试图在 python 中找到矩阵的转置而不实际使用矩阵的大小。

我需要使用列表推导来执行类似 [[row[i] for row in test] for i in range(n)] 之类的操作,其中 test 是一个 nxn 矩阵而不实际使用 n。

4

3 回答 3

5

如果test是由列表列表表示的矩阵,则

zip(*test)

是转置。例如,

In [16]: t = [[1,2,3],[4,5,6]]

In [17]: t
Out[17]: [[1, 2, 3], 
          [4, 5, 6]]

In [18]: zip(*t)
Out[18]: [(1, 4), 
          (2, 5), 
          (3, 6)]

(输出已被格式化以更清楚地显示结果)。

要了解zip(*t)首先研究工作原理zip然后研究论证拆包。它有点令人费解,但是一旦您了解它的工作原理,您就会成为这两个概念的专家,并且效果非常令人愉悦。


这里没有理由使用列表推导,但无论如何你都可以这样做:

In [21]: [[row[i] for row in t] for i in range(len(t[1]))]
Out[21]: [[1, 4], [2, 5], [3, 6]]

len(t[1])给出列数。)

于 2012-08-01T21:10:45.210 回答
1

您可以使用zip和的组合*

>>> list(zip(*[[1,2,3],[4,5,6]]))
[(1, 4), (2, 5), (3, 6)]
于 2012-08-01T21:14:44.507 回答
1

列表理解可以帮助如下:

def transpose(matrix):
    return [[row[col] for row in matrix] for col in range(len(matrix[0]))]
于 2016-03-30T20:08:57.300 回答