按元素添加两个不同长度的列表?
问题描述:
如何执行不同长度列表的按元素添加?
假设“0”缺少元素。
注:LEN(一)将始终小于或等于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)相同,然后再做zip?如果这是一个好的pythonic解决方案,那么会怎么做呢?
答
还有一个替代zip
不会停在最短:itertools.zip_longest()
。您可以在更短的列表指定填充值:
from itertools import zip_longest
result = [sum(n) for n in zip_longest(a, b, fillvalue=0)]
答
您可以使用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]
答
你可以垫一个像这样的零并使用金额
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]