Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Python - Prefix sum list
A prefix sum list (also called cumulative sum) is a new list where each element represents the sum of all elements from the start up to that position in the original list. This is useful for range sum queries and sliding window problems.
Using List Comprehension with sum()
The most straightforward approach uses list comprehension with the sum() function and list slicing ?
# using list comprehension + sum() + list slicing
# initializing list
test_list = [3, 4, 1, 7, 9, 1]
# printing original list
print("The original list : " + str(test_list))
# using list comprehension + sum() + list slicing
# prefix sum list
res = [sum(test_list[:i + 1]) for i in range(len(test_list))]
# print result
print("The prefix sum list is : " + str(res))
The original list : [3, 4, 1, 7, 9, 1] The prefix sum list is : [3, 7, 8, 15, 24, 25]
Using itertools.accumulate()
Python's itertools.accumulate() function provides a built-in solution for cumulative operations ?
import itertools
numbers = [3, 4, 1, 7, 9, 1]
print("Original list:", numbers)
# Using accumulate for prefix sum
prefix_sum = list(itertools.accumulate(numbers))
print("Prefix sum list:", prefix_sum)
Original list: [3, 4, 1, 7, 9, 1] Prefix sum list: [3, 7, 8, 15, 24, 25]
Manual Loop Approach
For better understanding, you can build the prefix sum manually using a loop ?
data = [3, 4, 1, 7, 9, 1]
prefix_sum = []
running_sum = 0
print("Original list:", data)
for num in data:
running_sum += num
prefix_sum.append(running_sum)
print("Prefix sum list:", prefix_sum)
Original list: [3, 4, 1, 7, 9, 1] Prefix sum list: [3, 7, 8, 15, 24, 25]
Comparison
| Method | Time Complexity | Best For |
|---|---|---|
| List comprehension + sum() | O(n²) | Small lists, readable code |
| itertools.accumulate() | O(n) | Built-in solution, efficient |
| Manual loop | O(n) | Educational, customizable |
Conclusion
Use itertools.accumulate() for the most efficient prefix sum calculation. The manual loop approach helps understand the concept, while list comprehension offers readable but slower performance for large lists.
