[英]How to divide list of list in Python 3?
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]]
Can we divide each element from list1 and list2? 我们可以从list1和list2中划分每个元素吗?
Output should again be in lists of list. 输出应该再次列在列表中。
IIUC 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.]])
This is commonly known as zipwith
. 这通常称为
zipwith
。 Python doesn't have a builtin function to do this, but it's easy to build yourself with a list comprehension. Python没有内置函数来执行此操作,但使用列表解析可以轻松构建自己。
[f(a, b) for a, b in zip(list1, list2)] # where f is the function to zip with!
This is actually a zipwith
of zipwith
s, though, so let's nest: 这实际上是
zipwith
的zipwith
,所以让我们窝:
[[aa/bb for (aa, bb) in zip(a, b)] for (a, b) in zip(list1, list2)]
EDIT: as Aran-Fey points out, zipwith
does exist as map
in Python, which makes this: 编辑:正如Aran-Fey指出的那样,
zipwith
确实作为Python中的map
存在,这使得:
import functools
import operator
zipwithdiv = functools.partial(map, functools.partial(map, operator.truediv))
zipwithdiv(list1, list2) # magic!
which is, admittedly, uglier than sin. 诚然,这比罪恶更丑陋。 But it makes my little functional heart go a-pitter patter.
但它让我的小功能心脏变得笨拙。
You can try the following using the built-in function zip
: 您可以使用内置函数
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)
this will produce: 这将产生:
[['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]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.