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

我试图并行添加两个不相等的嵌套列表的所有元素,并将结果追加到另一个新列表,我写了一些可以添加它们的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)

最终的结果应该是这样的

[2, 6, 3, 7, 3, 6, 3]

最佳答案 您可以简单地使用
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]

即使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]

请注意,当我们压缩x和y时,我们使用[0]作为fillvalue.当我们输入i和j时,我们使用0作为填充值.

因此,如果x和y中的列表数不相等,则填充使用[0],当i和j中的元素数不相等时,将使用0作为填充.

点赞