我试图在没有实际使用矩阵的大小的情况下在python中找到矩阵的转置。矩阵的转置
我需要使用列表解析来做一些类似[[row [i] for test in] for i in range(n)],其中test是一个nxn矩阵,实际上并不使用n。
我试图在没有实际使用矩阵的大小的情况下在python中找到矩阵的转置。矩阵的转置
我需要使用列表解析来做一些类似[[row [i] for test in] for i in range(n)],其中test是一个nxn矩阵,实际上并不使用n。
如果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。它有点像一个弯路,但是一旦你看到它是如何工作的,你将成为这两个概念的专家,效果相当令人满意。
没有理由在这里使用列表理解,但这里是你如何能做到这一点呢:(len(t[1])
给出了列数)
In [21]: [[row[i] for row in t] for i in range(len(t[1]))]
Out[21]: [[1, 4], [2, 5], [3, 6]]
您可以使用组合zip
和*
:
>>> list(zip(*[[1,2,3],[4,5,6]]))
[(1, 4), (2, 5), (3, 6)]
列表理解可以帮助如下所示:
def transpose(matrix):
return [[row[col] for row in matrix] for col in range(len(matrix[0]))]
http://stackoverflow.com/q/4937491/395857的副本? – 2012-08-01 21:14:45
@FranckDernoncourt我的问题不同于那个,因为我指定我需要一个列表理解而不使用大小。 – ffledgling 2012-08-01 21:25:20