Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中递归地转置矩阵_Python - Fatal编程技术网

在python中递归地转置矩阵

在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

我一直试图弄清楚如何在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 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得到了他想要的,也许他应该放弃递归要求。真正的递归,令人惊讶。更新为返回列表而不是生成器。