# python – How can I count the occurrences of a list item?

## python – How can I count the occurrences of a list item?

If you only want one items count, use the `count` method:

``````>>> [1, 2, 3, 4, 1, 4, 1].count(1)
3
``````

## Important Note regarding count performance

Dont use this if you want to count multiple items.

Calling `count` in a loop requires a separate pass over the list for every `count` call, which can be catastrophic for performance.

If you want to count all items, or even just multiple items, use `Counter`, as explained in the other answers.

Use `Counter` if you are using Python 2.7 or 3.x and you want the number of occurrences for each element:

``````>>> from collections import Counter
>>> z = [blue, red, blue, yellow, blue, red]
>>> Counter(z)
Counter({blue: 3, red: 2, yellow: 1})
``````

#### python – How can I count the occurrences of a list item?

Counting the occurrences of one item in a list

For counting the occurrences of just one list item you can use `count()`

``````>>> l = [a,b,b]
>>> l.count(a)
1
>>> l.count(b)
2
``````

Counting the occurrences of all items in a list is also known as tallying a list, or creating a tally counter.

Counting all items with count()

To count the occurrences of items in `l` one can simply use a list comprehension and the `count()` method

``````[[x,l.count(x)] for x in set(l)]
``````

(or similarly with a dictionary `dict((x,l.count(x)) for x in set(l))`)

Example:

``````>>> l = [a,b,b]
>>> [[x,l.count(x)] for x in set(l)]
[[a, 1], [b, 2]]
>>> dict((x,l.count(x)) for x in set(l))
{a: 1, b: 2}
``````

Counting all items with Counter()

Alternatively, theres the faster `Counter` class from the `collections` library

``````Counter(l)
``````

Example:

``````>>> l = [a,b,b]
>>> from collections import Counter
>>> Counter(l)
Counter({b: 2, a: 1})
``````

How much faster is Counter?

I checked how much faster `Counter` is for tallying lists. I tried both methods out with a few values of `n` and it appears that `Counter` is faster by a constant factor of approximately 2.

Here is the script I used:

``````from __future__ import print_function
import timeit

t1=timeit.Timer(Counter(l),
import random;import string;from collections import Counter;n=1000;l=[random.choice(string.ascii_letters) for x in range(n)]
)

t2=timeit.Timer([[x,l.count(x)] for x in set(l)],
import random;import string;n=1000;l=[random.choice(string.ascii_letters) for x in range(n)]
)

print(Counter(): , t1.repeat(repeat=3,number=10000))
print(count():   , t2.repeat(repeat=3,number=10000)
``````

And the output:

``````Counter():  [0.46062711701961234, 0.4022796869976446, 0.3974247490405105]
count():    [7.779430688009597, 7.962715800967999, 8.420845870045014]
``````