On Mon, 19 Jul 2010 04:18:48 -0700, dhruvbird wrote: > Hello, > I have a list of integers: x = [ 0, 1, 2, 1, 1, 0, 0, 2, 3 ] And would > like to compute the cumulative sum of all the integers > from index zero into another array. So for the array above, I should > get: [ 0, 1, 3, 4, 5, 5, 5, 7, 10 ]
[pedant] The above are *lists*, not arrays. Python has arrays, but you have to call "import array" to get them. [/pedant] > What is the best way (or pythonic way) to get this. Others have given you a plethora of advanced, complicated and obscure ways to solve this question, but I haven't seen anyone give the simplest method (simple as in no tricks or advanced features): data = [0, 1, 2, 1, 1, 0, 0, 2, 3] csums = [] for x in data: if csums: y = x + csums[-1] else: y = x csums.append(y) We can save some code with the ternary operator: data = [0, 1, 2, 1, 1, 0, 0, 2, 3] csums = [] for x in data: csums.append((x + csums[-1]) if csums else x) Here's a version that writes the cumulative sum in place: data = [0, 1, 2, 1, 1, 0, 0, 2, 3] for i in range(1, len(data)): data[i] += data[i-1] -- Steven -- http://mail.python.org/mailman/listinfo/python-list