Sentry Answers>Python>

Sum a list of numbers in Python

Sum a list of numbers in Python

David Y.

The Problem

In Python, how do I add all the numbers in a list to get a total?

The Solution

Python provides a built-in sum function, which returns the sum of all items in an iterable (such as a list). For example:

Click to Copy
numbers = [1, 2, 3, 4, 5] total = sum(numbers) print(total) # Will print 15 (1 + 2 + 3 + 4 + 5)

sum is an example of a fold (also called reduce), which is a type of higher-order functions that produces a single result from a sequence of items. It does this by applying a function (in this case, addition) to the first two items (1 + 2), getting a result (3) and then applying the same function to that result and the next item (3 + 4). This process continues until the list is consumed, and then the final result is returned.

sum takes an optional start parameter, which provides a first value to use in the first addition. For example:

Click to Copy
numbers = [1, 2, 3, 4, 5] total = sum(numbers, 6) print(total) # Will print 21 (6 + 1 + 2 + 3 + 4 + 5)

We can write our own folds using the reduce function from Python’s built-in functools module. For example, here’s how we might find the product of all numbers in a list:

Click to Copy
from functools import reduce numbers = [1, 2, 3, 4, 5] product = reduce(lambda x, y: x * y, numbers) print(product) # Will print 120 (1 * 2 * 3 * 4 * 5)

We supply reduce with two arguments: a function which takes two arguments and a list. It will then apply this function to the contents of the list in the manner described above, ultimately producing a single result. We’ve used an anonymous lambda function here, but reduce will also work with a standard function, as below:

Click to Copy
from functools import reduce def multiply(x, y): return x * y numbers = [1, 2, 3, 4, 5] product = reduce(multiply, numbers) print(product) # Will print 120 (1 * 2 * 3 * 4 * 5)

reduce supports an optional initializer parameter, which works the same as the start parameter in sum.

Click to Copy
from functools import reduce numbers = [1, 2, 3, 4, 5] product = reduce(lambda x, y: x * y, numbers, 6) print(product) # Will print 720 (6 * 1 * 2 * 3 * 4 * 5)
  • Sentry BlogPython Performance Testing: A Comprehensive Guide (opens in a new tab)
  • Syntax.fmListen to the Syntax Podcast (opens in a new tab)
  • Sentry BlogLogging in Python: A Developer’s Guide (opens in a new tab)
  • CodecovPython - Codecov (opens in a new tab)
  • Syntax.fm logo
    Listen to the Syntax Podcast (opens in a new tab)

    Tasty treats for web developers brought to you by Sentry. Get tips and tricks from Wes Bos and Scott Tolinski.

    SEE EPISODES

Considered “not bad” by 4 million developers and more than 150,000 organizations worldwide, Sentry provides code-level observability to many of the world’s best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.