我一直在尝试找出如何在 Python 中仅使用映射和过滤器递归地转置矩阵(表示为列表的列表)。我尝试过各种实现,但没有一个有效。这是我目前拥有的:
def transpose(matrix):
return list(map(lambda x: [x], list(filter(lambda x: [0], matrix))))
所有其他答案都使用 for 循环和/或 zip 函数,这是一个限制。
任何指示也会有帮助
最佳答案
您可以将每行的第一列映射为子列表(成为新行),然后递归地将矩阵的其余部分(不包括第一列)传递到同一进程,直到所有行都为空:
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]]
关于python - 在Python中递归转置矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52884928/