2017-04-04 86 views
0

如何執行不同長度列表的按元素添加?
假設「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解決方案,那麼會怎麼做呢?

回答

3

還有一個替代zip不會停在最短:itertools.zip_longest()。您可以在更短的列表指定填充值:

from itertools import zip_longest 

result = [sum(n) for n in zip_longest(a, b, fillvalue=0)] 
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] 
-1

你可以墊一個像這樣的零並使用金額

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]