Sum a list of numbers in Python

# Sum a list of numbers in Python

David Y.

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
```.css-3i4pd0{position:relative;color:inherit;-webkit-transition:box-shadow 0.3s;transition:box-shadow 0.3s;will-change:box-shadow;outline:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;z-index:9;}.css-3i4pd0:hover,.css-3i4pd0:focus{cursor:pointer;}.css-3i4pd0:hover .e1fliqfg1,.css-3i4pd0:focus .e1fliqfg1{fill:#e1567c;cursor:pointer;}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
• Sentry BlogLogging in Python: A Developer’s Guide
• Listen to the Syntax Podcast

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

SEE EPISODES

Loved by over 4 million developers and more than 90,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.