Use map with operator.add:
>>> from operator import add
>>> list( map(add, list1, list2) )
[5, 7, 9]
or zip with a list comprehension:
>>> [sum(x) for x in zip(list1, list2)]
[5, 7, 9]
Timing comparisons:
>>> list2 = [4, 5, 6]*10**5
>>> list1 = [1, 2, 3]*10**5
>>> %timeit from operator import add;map(add, list1, list2)
10 loops, best of 3: 44.6 ms per loop
>>> %timeit from itertools import izip; [a + b for a, b in izip(list1, list2)]
10 loops, best of 3: 71 ms per loop
>>> %timeit [a + b for a, b in zip(list1, list2)]
10 loops, best of 3: 112 ms per loop
>>> %timeit from itertools import izip;[sum(x) for x in izip(list1, list2)]
1 loops, best of 3: 139 ms per loop
>>> %timeit [sum(x) for x in zip(list1, list2)]
1 loops, best of 3: 177 ms per loop
Answer from Ashwini Chaudhary on Stack OverflowUse map with operator.add:
>>> from operator import add
>>> list( map(add, list1, list2) )
[5, 7, 9]
or zip with a list comprehension:
>>> [sum(x) for x in zip(list1, list2)]
[5, 7, 9]
Timing comparisons:
>>> list2 = [4, 5, 6]*10**5
>>> list1 = [1, 2, 3]*10**5
>>> %timeit from operator import add;map(add, list1, list2)
10 loops, best of 3: 44.6 ms per loop
>>> %timeit from itertools import izip; [a + b for a, b in izip(list1, list2)]
10 loops, best of 3: 71 ms per loop
>>> %timeit [a + b for a, b in zip(list1, list2)]
10 loops, best of 3: 112 ms per loop
>>> %timeit from itertools import izip;[sum(x) for x in izip(list1, list2)]
1 loops, best of 3: 139 ms per loop
>>> %timeit [sum(x) for x in zip(list1, list2)]
1 loops, best of 3: 177 ms per loop
The others gave examples how to do this in pure python. If you want to do this with arrays with 100.000 elements, you should use numpy:
In [1]: import numpy as np
In [2]: vector1 = np.array([1, 2, 3])
In [3]: vector2 = np.array([4, 5, 6])
Doing the element-wise addition is now as trivial as
In [4]: sum_vector = vector1 + vector2
In [5]: print sum_vector
[5 7 9]
just like in Matlab.
Timing to compare with Ashwini's fastest version:
In [16]: from operator import add
In [17]: n = 10**5
In [18]: vector2 = np.tile([4,5,6], n)
In [19]: vector1 = np.tile([1,2,3], n)
In [20]: list1 = [1,2,3]*n
In [21]: list2 = [4,5,6]*n
In [22]: timeit map(add, list1, list2)
10 loops, best of 3: 26.9 ms per loop
In [23]: timeit vector1 + vector2
1000 loops, best of 3: 1.06 ms per loop
So this is a factor 25 faster! But use what suits your situation. For a simple program, you probably don't want to install numpy, so use standard python (and I find Henry's version the most Pythonic one). If you are into serious number crunching, let numpy do the heavy lifting. For the speed freaks: it seems that the numpy solution is faster starting around n = 8.
Adding together two lists?
Can someone explain to me how to add up all the numbers in a list without using sum?
list.append() vs set.add()
Hi, I'm trying to create a function which adds together items from two lists and I can't figure out what I'm doing wrong. My initial code was very similar to this but did not work, after googling other people's solutions I've essentially copy and pasted what multiple people on various forums advised, but still have not had any success. Currently it just prints out a blank list, "[ ]", and I don't know why. Can anyone help?
def list_sum(a, b):
a = []
b = []
c = []
for i in range(len(a)):
listAdd = (a[i] + b[i])
c.append(listAdd)
return(c)
if __name__ == "__main__":
a = [1, 2, 3]
b = [4, 5, 6]
add = list_sum(a, b)
print(add)Hi there, so I’m currently learning about lists and loops and my friend challenged me to add up a entire list without using sum
So far my code looks like this (just the list as a variable)
ls = [1 , 5, 4, 3, 7]
Is there any reason why list uses append() and set uses add() function?* For me both append() and add() does the same thing, adds an element to the list of set. Why different method names were chosen?
* not function, but method