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

ID : 499

viewed : 487

Tags : pythonlistcountpython

### Top 5 Answer for python - How can I count the occurrences of a list item?

100

If you only want one item's count, use the `count` method:

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

## Important Note regarding count performance

Don't 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.

84

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}) ``

70

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, there's 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] ``

70

Another way to get the number of occurrences of each item, in a dictionary:

``dict((i, a.count(i)) for i in a) ``

59

# Given an item, how can I count its occurrences in a list in Python?

Here's an example list:

``>>> l = list('aaaaabbbbcccdde') >>> l ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'e'] ``

## `list.count`

There's the `list.count` method

``>>> l.count('b') 4 ``

This works fine for any list. Tuples have this method as well:

``>>> t = tuple('aabbbffffff') >>> t ('a', 'a', 'b', 'b', 'b', 'f', 'f', 'f', 'f', 'f', 'f') >>> t.count('f') 6 ``

## `collections.Counter`

And then there's collections.Counter. You can dump any iterable into a Counter, not just a list, and the Counter will retain a data structure of the counts of the elements.

Usage:

``>>> from collections import Counter >>> c = Counter(l) >>> c['b'] 4 ``

Counters are based on Python dictionaries, their keys are the elements, so the keys need to be hashable. They are basically like sets that allow redundant elements into them.

### Further usage of `collections.Counter`

``>>> c.update(list('bbb')) >>> c['b'] 7 >>> c.subtract(list('bbb')) >>> c['b'] 4 ``

And you can do multi-set operations with the counter as well:

``>>> c2 = Counter(list('aabbxyz')) >>> c - c2                   # set difference Counter({'a': 3, 'c': 3, 'b': 2, 'd': 2, 'e': 1}) >>> c + c2                   # addition of all elements Counter({'a': 7, 'b': 6, 'c': 3, 'd': 2, 'e': 1, 'y': 1, 'x': 1, 'z': 1}) >>> c | c2                   # set union Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1, 'y': 1, 'x': 1, 'z': 1}) >>> c & c2                   # set intersection Counter({'a': 2, 'b': 2}) ``

## Why not pandas?

Why not use pandas?

Pandas is a common library, but it's not in the standard library. Adding it as a requirement is non-trivial.

There are builtin solutions for this use-case in the list object itself as well as in the standard library.

If your project does not already require pandas, it would be foolish to make it a requirement just for this functionality.