如何并行添加两个嵌套列表并将结果附加到python中的新列表

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)

the*_*eye 5

您可以像这样简单地使用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 xy我们使用[0]fillvalue.而当我们zip ij我们使用0fillvalue.

因此,如果列表中的数量xy不相等,那么[0]将使用填充,当元素的数量ij不相等时,0将用作填充.