dan*_*dee 3 python list nested-lists python-3.x
我试图并行添加两个不相等的嵌套列表的所有元素,并将结果追加到另一个新列表,我写了一些可以添加它们的hacky代码,但代码有很多问题,首先我试图通过将0添加到列表的末尾来使这些对相等,但代码仍然遇到问题,因为第一对的长度是3而第二对的长度是4,我也尝试使用map但是我无法添加整数和NoneType,
import pdb
import itertools
x = [[2,3,3], [5,0,3]]
y = [[0,3], [2,3,3,3]]
for idx, (a, b) in enumerate(itertools.zip_longest(x, y)):
while len(a) < len(b):
x[idx].append(0)
while len(b) < len(a):
y[idx].append(0)
print(x, y)
new_list = list()
for i in zip(x, y):
for idx, j in enumerate(i):
for ind, a in enumerate(j):
val = x[idx][ind] + y[idx][ind]
new_list.append(val)
print(new_list)
Run Code Online (Sandbox Code Playgroud)
最终的结果应该是这样的
[2, 6, 3, 7, 3, 6, 3]
Run Code Online (Sandbox Code Playgroud)
您可以像这样简单地使用itertools.zip_longest和填写0
>>> from itertools import zip_longest as zip
>>> x = [[2, 3, 3], [5, 0, 3]]
>>> y = [[0, 3], [2, 3, 3, 3]]
>>> [k + l for i, j in zip(x, y, fillvalue=[0]) for k, l in zip(i, j, fillvalue=0)]
[2, 6, 3, 7, 3, 6, 3]
Run Code Online (Sandbox Code Playgroud)
即使x并且y具有不等数量的元素,这也会起作用,
>>> from itertools import zip_longest as zip
>>> x = [[2, 3, 3], [5, 0, 3], [1]]
>>> y = [[0, 3], [2, 3, 3, 3]]
>>> [k + l for i, j in zip(x, y, fillvalue=[0]) for k, l in zip(i, j, fillvalue=0)]
[2, 6, 3, 7, 3, 6, 3, 1]
Run Code Online (Sandbox Code Playgroud)
需要注意的是,我们什么时候zip x和y我们使用[0]的fillvalue.而当我们zip i和j我们使用0的fillvalue.
因此,如果列表中的数量x和y不相等,那么[0]将使用填充,当元素的数量i和j不相等时,0将用作填充.