Merging/adding lists in Python
[sum(a) for a in zip(*array)]
[sum(value) for value in zip(*array)] is pretty standard.
This might help you understand it:
In [1]: array=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
In [2]: array
Out[2]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
In [3]: *array
------------------------------------------------------------
File "<ipython console>", line 1
*array
^
<type 'exceptions.SyntaxError'>: invalid syntax
The unary star is not an operator by itself. It unwraps array elements into arguments into function calls.
In [4]: zip(*array)
Out[4]: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
zip() is a built-in function
In [5]: zip(*array)[0]
Out[5]: (1, 4, 7)
each element for the list returned by zip is a set of numbers you want.
In [6]: sum(zip(*array)[0])
Out[6]: 12
In [7]: [sum(values) for values in zip(*array)]
Out[7]: [12, 15, 18]
An alternative way:
map(sum, zip(*array))
If you're doing a lot of this kind of thing, you want to learn about scipy
.
>>> import scipy
>>> sum(scipy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]))
array([12, 15, 18])
All array sizes are checked for you automatically. The sum is done in pure C, so it's very fast. scipy
arrays are also very memory efficient.
The drawback is you're dependent on a fairly complex third-party module. But that's a very good tradeoff for many purposes.
Agree with fivebells, but you could also use Numpy, which is a smaller (quicker import) and more generic implementation of array-like stuff. (actually, it is a dependency of scipy). These are great tools which, as have been said, are a 'must use' if you deal with this kind of manipulations.