2011-04-26 89 views
2
Input: two lists (list1, list2) of equal length 
Output: one list (result) of the same length, such that: 
    result[i] = list1[i] + list2[i] 

有沒有簡明的方法可以做到這一點?或者,這是最好的:python:逐行列表總和

# Python 3 
assert len(list1) == len(list2) 
result = [list1[i] + list2[i] for i in range(len(list1))] 
+2

我原本讀爲「毫無意義的明智之舉」。我想我可能需要一些睡眠。 – 2011-04-26 09:47:45

回答

10

您可以使用內置的zip功能,或者你也可以使用add操作符映射兩個列表。像這樣:

from operator import add 
map(add, list1,list2) 
+0

+1不知道'map'可以接受多個迭代。肯定比我的回答好:) – 2011-04-26 09:47:51

5
[a + b for a, b in zip(list1, list2)] 
8

IMO的最好辦法是

result = [x + y for x, y in zip(list1, list2)] 

與Python3基本zip甚至沒有建立一箇中間列表(不是一個問題,除非list1list2名單是巨大的)。

但請注意zip將停在最短的輸入列表,因此您的assert仍然需要。

1

有幾種方式,例如,使用mapsumizip(但據我所知,zip在Python 3的工作方式相同izip):

>>> from itertools import izip 
>>> map(sum, izip(list1, list2)) 
0

我會怎麼做:

result = [x+x for x,y in zip(list1, list2)] 
+0

不,你不會的。 – pillmuncher 2011-04-26 13:53:44