我刚刚通过阅读matrix transposing tutorial here开始列表推导。我理解这个例子,但是我试图找到一种方法来转换矩阵而不用硬编码范围。
matrix = [
[1,2,3,4],
[5,6,7,8],
[9,10,11,12]
]
lcomp = [[row[i] for row in matrix] for i in range(4)]
print(lcomp)
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]] #result
我希望它能够找出最大嵌套数组所具有的最大元素数,而不是range(4)
。我尝试放置lambda
,但不断收到错误。是否可以在单行中进行此操作?
答案 0 :(得分:2)
你可以使用另一种理解!它们是一个非常强大的工具。
[[row(i) for row in matrix] for i in range(max(len(r) for r in matrix))]
答案 1 :(得分:1)
假设所有子列表具有相同数量的元素:
s = len(matrix[0])
lcomp = [[row[i] for row in matrix] for i in range(s)]
对于长度不匹配的子列表:
s = len(max(matrix, key=len))
在旁注中,您可以使用zip
轻松转置矩阵:
matrix_T = zip(*matrix) # wrap with list() for Python 3
或者使用itertools.izip_longest
表示长度不匹配的子列表。