Python List count() Method

list.count() tells you how many times one value appears in a list.

It is a useful method when you want to:

  • count one specific item
  • check whether a value appears more than once
  • quickly see how many matches exist

It returns a number and does not change the original list.

Quick answer

numbers = [1, 2, 2, 3, 2]
result = numbers.count(2)
print(result)  # 3

Use list.count(value) to count how many times one value appears in a list.

What list.count() does

list.count():

  • counts how many times a given value appears in a list
  • returns an integer
  • does not change the original list
  • checks for exact matches

This means Python looks through the whole list and compares each item to the value you gave it.

If the value appears 3 times, the method returns 3.

If it does not appear at all, the method returns 0.

Basic syntax

The syntax is:

my_list.count(value)
  • my_list is the list you want to search
  • value is the item you want to count

Example:

letters = ["a", "b", "a", "c"]
print(letters.count("a"))

Output:

2

Python checks the whole list. If the value is not found, it returns 0.

What the return value means

The return value from count() is always an int.

Possible results:

  • 0 if the value does not exist in the list
  • 1 if it appears once
  • 2 or more if it appears multiple times

Example:

colors = ["red", "blue", "green", "blue"]

print(colors.count("blue"))   # 2
print(colors.count("red"))    # 1
print(colors.count("yellow")) # 0

If you only want to know whether a value exists, count() works, but using in is often simpler. See how to check if a value exists in a list in Python.

How matching works

list.count() uses equality matching.

That means Python checks whether each item is equal to the value you passed in.

Important details:

  • matches are based on equality
  • strings are case-sensitive
  • 1 and True may compare as equal in Python
  • nested lists can be counted if the entire nested list matches

Strings are case-sensitive

words = ["apple", "Apple", "apple"]
print(words.count("apple"))  # 2
print(words.count("Apple"))  # 1

"apple" and "Apple" are different strings.

1 and True can match

values = [1, True, 2, 1]
print(values.count(1))     # 3
print(values.count(True))  # 3

This surprises many beginners.

In Python:

  • True == 1
  • False == 0

So count() may include both booleans and integers when they compare as equal.

Nested lists must match exactly

items = [[1, 2], [3, 4], [1, 2], [1]]
print(items.count([1, 2]))  # 2

Python counts only exact matches of the full nested list.

Beginner examples to include

Count a number in a list of numbers

numbers = [10, 20, 10, 30, 10]
result = numbers.count(10)

print(result)

Output:

3

Count a word in a list of strings

words = ["cat", "dog", "cat", "bird"]
result = words.count("cat")

print(result)

Output:

2

Count a value that is not in the list

numbers = [1, 2, 3, 4]
result = numbers.count(5)

print(result)

Output:

0

Count repeated nested list values

data = [[1, 2], [1, 2], [2, 3], [1, 2]]
result = data.count([1, 2])

print(result)

Output:

3

When to use count()

Use count() when you need the number of appearances of one value.

Good use cases:

  • counting one specific item
  • checking whether a list contains duplicates of a value
  • doing a quick count before making a decision

Example:

votes = ["yes", "no", "yes", "yes"]
yes_votes = votes.count("yes")

print(yes_votes)

count() is not the best choice if you need counts for many different values. In that case, you would usually use a loop or another tool.

If you are still learning list basics, see Python lists explained for beginners and what is a list in Python.

Common mistakes

Here are some common beginner mistakes with list.count().

Trying to count part of a string instead of list items

list.count() counts list items, not parts of a string.

words = ["apple pie", "banana", "apple pie"]
print(words.count("apple"))  # 0

Why 0?

Because "apple" is not a full item in the list. The list contains "apple pie".

If your data is a string instead of a list, you may be thinking of str.count().

Expecting count() to return True or False

count() returns a number, not a boolean.

numbers = [1, 2, 2, 3]
print(numbers.count(2))  # 2

If you want a true/false answer, use:

print(2 in numbers)  # True

Forgetting that string matching is case-sensitive

names = ["Sam", "sam", "SAM"]
print(names.count("sam"))  # 1

Only the exact string "sam" matches.

Calling count() on the wrong type

If you are not sure what your variable contains, inspect it first:

print(my_list)
print(type(my_list))
print(my_list.count(value))
print(value in my_list)
for item in my_list:
    print(repr(item))

These checks can help you see:

  • whether the variable is really a list
  • whether the values are exactly what you expect
  • whether spacing, capitalization, or data type differences are causing problems

Common causes of confusion include:

  • using count() when the data is a string, not a list
  • expecting substring behavior instead of exact list-item matching
  • confusing list.count() with string count()
  • being surprised that booleans and integers can compare as equal

FAQ

Does list.count() change the list?

No. It only returns how many times a value appears.

What happens if the value is not in the list?

The method returns 0.

Can list.count() count multiple different values at once?

No. It counts one value per call.

Is list.count() case-sensitive for strings?

Yes. "Apple" and "apple" are different values.

Why does True sometimes count like 1?

In Python, True compares equal to 1 and False compares equal to 0.

See also