我试图在python中找到矩阵的转置而不实际使用矩阵的大小。
我需要使用列表推导来为[范围(n)中的i做[[row [i] for row in test]],其中test是一个nxn矩阵而不实际使用n。
答案 0 :(得分: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)
首次学习how zip
works,然后学习argument unpacking。这有点令人头疼,但是一旦你看到它如何运作,你将成为这两个概念的专家,效果非常令人愉悦。
这里没有理由使用列表理解,但无论如何你都可以这样做:
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])
给出了列数。)
答案 1 :(得分:1)
您可以结合使用zip
和*
:
>>> list(zip(*[[1,2,3],[4,5,6]]))
[(1, 4), (2, 5), (3, 6)]
答案 2 :(得分:1)
def transpose(matrix):
return [[row[col] for row in matrix] for col in range(len(matrix[0]))]