list1 = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0],
         [0, 500000.0, 500000.0, 500000.0], [0, 0, 1000000.0, 0],
         [0, 1000000.0, 500000.0, 2500000.0]]

list2 = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0],
         [0, 1, 1, 1], [0, 0, 2, 0], [0, 2, 1, 4]]

我们能把list1和list2中的每个元素分开吗?
输出应该再次出现在列表中。

最佳答案

这通常被称为zipwith。Python没有一个内置函数来实现这一点,但是使用列表理解来构建自己很容易。

[f(a, b) for a, b in zip(list1, list2)]  # where f is the function to zip with!

不过,这实际上是一个zipwith的zipwiths,所以让我们嵌套:
[[aa/bb for (aa, bb) in zip(a, b)] for (a, b) in zip(list1, list2)]

编辑:正如Aran Fey指出的那样,在Python中确实存在为zipwith,这使得:
import functools
import operator

zipwithdiv = functools.partial(map, functools.partial(map, operator.truediv))

zipwithdiv(list1, list2)  # magic!

诚然,这比罪更丑陋。但它使我的小功能心脏跳动得很厉害。

10-07 15:08