原生地在python中递归转置矩阵

时间:2018-10-19 02:09:30

标签: python

我一直试图找出如何使用map和递归过滤在Python中转置矩阵(表示为列表列表)。我尝试了各种实现,但没有一个起作用。这是我目前所拥有的:

def transpose(matrix):
    return list(map(lambda x: [x], list(filter(lambda x: [0], matrix))))

使用for循环和/或zip函数的所有其他答案是有限制的。

任何方向都会有帮助

2 个答案:

答案 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循环。