在python中递归地转置矩阵
我一直试图弄清楚如何在Python中使用map和filter递归地转换矩阵(表示为列表列表)。我我尝试过各种实现,但都不起作用。以下是我目前拥有的:在python中递归地转置矩阵,python,Python,我一直试图弄清楚如何在Python中使用map和filter递归地转换矩阵(表示为列表列表)。我我尝试过各种实现,但都不起作用。以下是我目前拥有的: def transpose(matrix): return list(map(lambda x: [x], list(filter(lambda x: [0], matrix)))) 所有其他答案都使用for循环和/或zip函数,这是一个限制 任何方向都会有帮助明白了: list(map(lambda i: list(map(lambda
def transpose(matrix):
return list(map(lambda x: [x], list(filter(lambda x: [0], matrix))))
所有其他答案都使用for循环和/或zip函数,这是一个限制
任何方向都会有帮助明白了:
list(map(lambda i: list(map(lambda x: x[i], matrix)), range(len(matrix[0]))))
无
用于此循环中的循环。您可以将每行的第一列映射为子列表(以成为新行),然后递归地将矩阵的其余部分(没有第一列)传递给同一进程,直到所有行都为空:
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]]
@E.Coms:不是重复的,“递归”不是转置的常见部分,也不存在于链接中(即使OP的代码中没有任何递归?)是的,所有的重复都使用某种形式或zip或for循环。@blhsing请参见above@blhsing不是复制品。他要求只使用lambda
和filter
进行转置。很抱歉。然后重新打开。很好,但OP要求一个递归解决方案。@ilovesports524所以递归和过滤器毕竟不是必需的吗?@blhsing是的,你是对的。我只是想在不使用
的情况下为
做这件事,但看起来OP得到了他想要的,也许他应该放弃递归要求。真正的递归,令人惊讶。更新为返回列表而不是生成器。