[英]Element-wise addition of two list of different lengths?
如何執行不同長度列表的元素添加?
假設缺失元素為“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)]
是否可以在執行 zip 之前自動將“0”元素附加到(列表 a),使其與(列表 b)的長度相同? 如果這是一個很好的 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]
如果您不想導入任何內容,只需在較短列表的末尾附加一些零即可。
result = [sum(n) for n in zip(a + [0] * (len(b) - len(a)), b)]
你可以像這樣用零填充 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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.