元素添加两个不同长度的列表?

时间:2017-04-04 18:47:14

标签: python

如何执行不同长度列表的逐元素添加?
假设" 0"缺少元素。
注意:len(a)将始终小于或等于len(b)

示例:

a=[1,2,3]
b=[1,2,3,4,5]

期望的结果:

result=[2,4,6,4,5]

我几乎可以,但不是这样做:

result=[sum(n) for n in zip(a,b)]

是否可以自动附加' 0'元素到(列表a)所以它与(列表b)的长度相同,在做拉链之前?如果这是一个很好的pythonic解决方案,那会怎么做呢?

4 个答案:

答案 0 :(得分:3)

还有一个替代zip不会停留在最短的时间:itertools.zip_longest()。您可以为较短的列表指定填充值:

from itertools import zip_longest

result = [sum(n) for n in zip_longest(a, b, fillvalue=0)]

答案 1 :(得分:2)

您可以使用izip_longest

>>> izip_longest(a,b,fillvalue=0)
<itertools.izip_longest object at 0x10bbd2520>
>>> list(_)
[(1, 1), (2, 2), (3, 3), (0, 4), (0, 5)]

然后你可以这样做:

>>> [sum(t) for t in izip_longest(a,b,fillvalue=0)]
[2, 4, 6, 4, 5]

答案 2 :(得分:2)

如果您不想导入任何内容,只需在较短列表的末尾附加一些零即可。

result = [sum(n) for n in zip(a + [0] * (len(b) - len(a)), b)]

答案 3 :(得分:-1)

你可以用这样的零填充a并使用sum

a=[1,2,3]
b=[1,2,3,4,5]
a[:] = [a[i] if i < len(a) else 0 for i,j in enumerate(b)]
result=[sum(n) for n in zip(a,b)]
print result

结果

[2, 4, 6, 4, 5]