Python sum() Function Explained

The built-in sum() function adds numbers from an iterable such as a list, tuple, or range object.

It is one of the simplest ways to get a total in Python. Beginners often use it to add all numbers in a list, but it also has an optional start value and a few important limits.

Quick example #

numbers = [1, 2, 3, 4]
total = sum(numbers)
print(total)  # 10

Use sum() to add numbers from an iterable like a list or tuple.

What sum() does #

sum() adds numeric values from an iterable.

Common beginner uses include:

  • Adding numbers in a list
  • Adding values in a tuple
  • Adding numbers from range()
  • Counting True values in a list of booleans

It returns the final total as a number.

Basic syntax #

sum(iterable, start=0)
  • iterable is the group of values to add
  • start is an optional value added before the iterable values
  • Most of the time, beginners only need sum(iterable)

If you are new to the word iterable, think of it as a group of values you can loop through, such as a list, tuple, or range() object.

Simple example #

Here is a basic example with a list of integers:

numbers = [5, 10, 15]
total = sum(numbers)

print(total)

Output:

30

What happens here:

  • numbers contains three integers
  • sum(numbers) adds them together
  • The result is stored in total

Using the start value #

The second argument lets you begin with an extra value before Python adds the iterable items.

numbers = [1, 2, 3]
total = sum(numbers, 10)

print(total)

Output:

16

This works like:

  • Start at 10
  • Add 1
  • Add 2
  • Add 3

This is useful when you already have a starting total.

What sum() can work with #

sum() works with numeric values.

Integers #

values = [1, 2, 3, 4]
print(sum(values))

Output:

10

Floats #

prices = [2.5, 3.75, 1.25]
print(sum(prices))

Output:

7.5

If you need a refresher on numeric types, see Python numbers explained: int and float.

Values from range() #

print(sum(range(1, 6)))

Output:

15

This adds 1 + 2 + 3 + 4 + 5.

Boolean values #

Booleans can also be summed because True acts like 1 and False acts like 0.

results = [True, False, True, True]
print(sum(results))

Output:

3

This is a simple way to count how many values are True.

What sum() does not work with #

sum() is for numeric addition. It is not for joining text or combining lists.

It does not join strings #

This causes an error:

words = ["hello", "world"]
print(sum(words))

Use string joining instead:

words = ["hello", "world"]
print("".join(words))

Output:

helloworld

If you need to turn values into text first, see str() explained.

It does not combine lists #

This also causes an error:

lists = [[1, 2], [3, 4]]
print(sum(lists))

sum() is not the right tool for combining lists.

It fails with mixed incompatible types #

For example:

values = [1, 2, "3"]
print(sum(values))

This fails because Python cannot add integers and strings together.

If you have number strings such as "3", convert them first. See how to convert a string to an int in Python.

Common errors and fixes #

Here are some of the most common beginner mistakes with sum().

Passing a single number instead of an iterable #

This is wrong:

print(sum(5))

Why it fails:

  • 5 is a single integer
  • sum() expects an iterable, not one number

Use an iterable instead:

print(sum([5]))

Output:

5

Trying to sum strings #

This is wrong:

values = ["1", "2", "3"]
print(sum(values))

Fix it by converting the strings to integers:

values = ["1", "2", "3"]
total = sum(int(x) for x in values)
print(total)

Output:

6

This kind of problem is related to TypeError with unsupported operand types.

Mixing numbers and strings #

This is wrong:

values = [1, 2, "3", 4]
print(sum(values))

Fix it by making all values numeric:

values = [1, 2, "3", 4]
total = sum(int(x) for x in values)
print(total)

Output:

10

Using sum() to join text #

This is wrong:

letters = ["P", "y", "t", "h", "o", "n"]
print(sum(letters))

Use join() instead:

letters = ["P", "y", "t", "h", "o", "n"]
print("".join(letters))

Output:

Python

If you see string-related errors while building text, you may also want to read TypeError: sequence item 0 expected str instance.

sum() vs manual loop #

sum() is often better when you only need the total.

Using sum() #

numbers = [4, 7, 9]
total = sum(numbers)
print(total)

Using a manual loop #

numbers = [4, 7, 9]
total = 0

for number in numbers:
    total += number

print(total)

Both produce the same result.

Why sum() is often better:

  • Shorter code
  • Easier to read
  • Clear intent: you want a total

Why a manual loop is sometimes better:

  • You need to skip some values
  • You need extra checks
  • You want to change values before adding them

For example, if you only want certain items, you might first filter a list in Python and then use sum() on the filtered result.

Common mistakes #

These are the most common causes of problems with sum():

  • Passing a number instead of an iterable, such as sum(5)
  • Trying to sum strings like ['1', '2', '3'] without converting them
  • Using sum() to join text instead of using string join()
  • Mixing numbers and strings in the same iterable

If sum() is failing, these quick checks can help:

print(values)
print(type(values))
print([type(x) for x in values])
print(sum([int(x) for x in values]))

What these checks do:

  • print(values) shows the actual data
  • print(type(values)) shows whether the main object is a list, tuple, or something else
  • print([type(x) for x in values]) shows the type of each item
  • print(sum([int(x) for x in values])) tests whether conversion to integers fixes the problem

FAQ #

What does sum() return in Python? #

It returns the total of the numeric values in an iterable.

Can sum() add strings in Python? #

No. Use ''.join(...) or 'separator'.join(...) for strings.

Can sum() work with floats? #

Yes. It can add both integers and floats.

What is the second argument in sum()? #

It is the optional start value added before the iterable values are summed.

Why does sum() give a TypeError? #

Usually because one or more values are not numbers, or because the argument is not an iterable.

See also #

Press Esc to close