如何划分Python 3中的列表列表?

Bha*_*ttu 2 python list-comprehension list python-3.x

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]]
Run Code Online (Sandbox Code Playgroud)

我们可以从list1和list2中划分每个元素吗?

输出应该再次列在列表中.

raf*_*elc 5

IIUC

import numpy as np
>>> np.array(list1)/list2
array([[    nan,     nan,     nan,     nan],
       [    nan,     nan,     nan,     nan],
       [    nan,     nan,     nan,     nan],
       [    nan,     nan,     nan,     nan],
       [    nan, 500000., 500000., 500000.],
       [    nan,     nan, 500000.,     nan],
       [    nan, 500000., 500000., 625000.]])
Run Code Online (Sandbox Code Playgroud)


Ada*_*ith 5

这通常被称为zipwith.Python没有内置函数来执行此操作,但使用列表解析可以轻松构建自己.

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

这实际上是一个zipwithzipwithS,不过,让我们的窝:

[[aa/bb for (aa, bb) in zip(a, b)] for (a, b) in zip(list1, list2)]
Run Code Online (Sandbox Code Playgroud)

编辑:正如Aran-Fey指出的那样,zipwith 确实存在map于Python中,这使得:

import functools
import operator

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

zipwithdiv(list1, list2)  # magic!
Run Code Online (Sandbox Code Playgroud)

诚然,这比罪恶更丑陋.但它让我的小功能心脏变得笨拙.

  • *psst*:"zipwith"只是[`map`](https://docs.python.org/3/library/functions.html#map).(是的,它支持多个迭代) (2认同)