簡體   English   中英

按元素添加兩個不同長度的列表?

[英]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 解決方案,那么人們會怎么做呢?

有一個不會停在最短的替代zipitertools.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM