我一直试图找出如何使用map和递归过滤在Python中转置矩阵(表示为列表列表)。我尝试了各种实现,但没有一个起作用。这是我目前所拥有的:
def transpose(matrix):
return list(map(lambda x: [x], list(filter(lambda x: [0], matrix))))
使用for循环和/或zip函数的所有其他答案是有限制的。
任何方向都会有帮助
答案 0 :(得分:2)
您可以将每一行的第一列映射为一个子列表(成为新行),然后将矩阵的其余部分(没有第一列)递归传递给同一过程,直到所有行都为空:
def transpose(m):
return m and [list(map(lambda r: r[0], m)), *transpose(list(filter(len, map(lambda r: r[1:], m))))]
这样:
transpose([[1,2,3],[3,4,5]])
返回:
[[1, 3], [2, 4], [3, 5]]
答案 1 :(得分:0)
知道了
list(map(lambda i: list(map(lambda x: x[i], matrix)), range(len(matrix[0]))))
此循环中没有for
循环。