Let data = [[3,7,2],[1,4,5],[9,8,7]]
Let's say I want to sum the elements for the indices of each list in the list, like adding numbers in a matrix column to get a single list. I am assuming that all lists in data are equal in length.
    print foo(data)     [[3,7,2],     [1,4,5],     [9,8,7]]     _______  >>>[13,19,14]   How can I iterate over the list of lists without getting an index out of range error? Maybe lambda? Thanks!
We use the sum() built in to sum, and a simple list comprehension to get the nth item from each list. As noted in my comment, this assumes you have a list of lists, as opposed to a load of variables: c_agents = [c_agent_0, c_agent_1, ...] Using data structures effectively will make your code much, much better.
The sum() function returns the sum of an iterable. Sum() takes a list (iterable) and returns the sum of the numbers within the list.
You could try this:
In [9]: l = [[3,7,2],[1,4,5],[9,8,7]]  In [10]: [sum(i) for i in zip(*l)] Out[10]: [13, 19, 14]   This uses a combination of zip and * to unpack the list and then zip the items according to their index. You then use a list comprehension to iterate through the groups of similar indices, summing them and returning in their 'original' position.
To hopefully make it a bit more clear, here is what happens when you iterate through zip(*l):
In [13]: for i in zip(*l):    ....:     print i    ....:         ....:      (3, 1, 9) (7, 4, 8) (2, 5, 7)   In the case of lists that are of unequal length, you can use itertools.izip_longest with a fillvalue of 0 - this basically fills missing indices with 0, allowing you to sum all 'columns':
In [1]: import itertools  In [2]: l = [[3,7,2],[1,4],[9,8,7,10]]  In [3]: [sum(i) for i in itertools.izip_longest(*l, fillvalue=0)] Out[3]: [13, 19, 9, 10]   In this case, here is what iterating over izip_longest would look like:
In [4]: for i in itertools.izip_longest(*l, fillvalue=0):    ...:     print i    ...:      (3, 1, 9) (7, 4, 8) (2, 0, 7) (0, 0, 10) 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With