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中的每个元素划分吗?
输出应再次位于列表列表中。
答案 0 :(得分: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.]])
答案 1 :(得分:5)
这通常称为zipwith
。 Python没有内置函数可以执行此操作,但是使用列表推导很容易构建自己。
[f(a, b) for a, b in zip(list1, list2)] # where f is the function to zip with!
这实际上是zipwith
中的zipwith
,因此,让我们嵌套一下:
[[aa/bb for (aa, bb) in zip(a, b)] for (a, b) in zip(list1, list2)]
编辑:正如Aran-Fey指出的那样,zipwith
确实在Python中以map
的形式存在,这使得:
import functools
import operator
zipwithdiv = functools.partial(map, functools.partial(map, operator.truediv))
zipwithdiv(list1, list2) # magic!
诚然,这比罪恶丑陋。但这使我的小心脏无法正常工作。
答案 2 :(得分:0)
您可以使用内置功能zip
尝试以下操作:
result = []
for sub_list1, sub_list2 in zip(list1, list2):
sub_list = []
for a, b in zip(sub_list1, sub_list2):
if b == 0:
sub_list.append('DivisionByZero')
continue
sub_list.append(a / b)
result.append(sub_list)
这将产生:
[['DivisionByZero', 'DivisionByZero', 'DivisionByZero', 'DivisionByZero'],
['DivisionByZero', 'DivisionByZero', 'DivisionByZero', 'DivisionByZero'],
['DivisionByZero', 'DivisionByZero', 'DivisionByZero', 'DivisionByZero'],
['DivisionByZero', 'DivisionByZero', 'DivisionByZero', 'DivisionByZero'],
['DivisionByZero', 500000.0, 500000.0, 500000.0],
['DivisionByZero', 'DivisionByZero', 500000.0, 'DivisionByZero'],
['DivisionByZero', 500000.0, 500000.0, 625000.0]]