How to count the occurrences of a list item?


Use the list.count() method of the built-in list class to get the number of occurrences of an item in the given list.

Example: Count List Items
names=['Deepak','Reema','John','Deepak','Munna','Reema','Deepak','Amit','John','Reema']
nm=input('Enter name to count: ')
count=names.count(nm)
print('count = ', count)
Output
Enter name to count: John
count =  2

Count Occurences of Each Item in List

We need two nested for loops to count the occurrences of each item in the list. Name at i'th positional index - i being variable controlling outer loop, is searched for occurrence in remaining list iterated with j variable. The current name and its count are added in a dictionary, only if the name is not previously present in it as a key.

Example: Count Occurences of Each Item in List
names=['Deepak','Reema','John','Deepak','Munna','Reema','Deepak','Amit','John','Reema']
d={}
for i in range(len(names)-1):
    x=names[i]
    c=0
    for j in range(i,len(names)):
        if names[j]==names[i]:
            c=c+1
    count=dict({x:c})
    if x not in d.keys():
        d.update(count)
print (d)
Output
{'Deepak': 3, 'Reema': 3, 'John': 2, 'Munna': 1, 'Amit': 1}

Again, we can use the count() method to make the solution more concise.

Example: Count Occurences of Each Item in List
names=['Deepak','Reema','John','Deepak','Munna','Reema','Deepak','Amit','John','Reema']
d={}
for i in range(len(names)-1):
    x=names[i]
    c=0
    for j in range(i,len(names)):
        c=names.count(x)
    count=dict({x:c})
    if x not in d.keys():
        d.update(count)
print (d)
Output
{'Deepak': 3, 'Reema': 3, 'John': 2, 'Munna': 1, 'Amit': 1}

However, this solution is not an efficient one. The occurrence of an item is counted as many times it appears in the list, thereby increasing the processing time, especially for a list with a large number of items.

To counter this problem, we first create a collection of unique items in the given list. Pythton's Set object is a collection of unique items.

Example: Convert List to Set
names=['Deepak','Reema','John','Deepak','Munna','Reema','Deepak','Amit','John','Reema']
nameset=set(names)
print(nameset)
Output
{'Reema', 'Munna', 'Amit', 'Deepak', 'John'}

Now we can count the occurrence of a set items in the list and construct the dictionary object. However, this time we will use list comprehension instead of regular for loop as we used above.

Example: Count Occurences of Each Item in List
names=['Deepak','Reema','John','Deepak','Munna','Reema','Deepak','Amit','John','Reema']
nameset=set(names)
d={name:names.count(name) for name in nameset}
print(d)
Output
{'Reema': 3, 'Munna': 1, 'Amit': 1, 'Deepak': 3, 'John': 2}

Count Occurences of Each Item in List using Collection Module

The collection module in Python's standard library defines many specialized container data types. One of them is a Counter class. It is a dict subclass that helps in the giving count of the hashable items (such as list or dictionary).

Example: Count Occurences of Each Item in List using Counter()
from collections import Counter

names=['Deepak','Reema','John','Deepak','Munna','Reema','Deepak','Amit','John','Reema']
d=dict(Counter(names))
print (d)
Output
{'Deepak': 3, 'Reema': 3, 'John': 2, 'Munna': 1, 'Amit': 1}

Note that, above, a Counter object is typecasted to a regular dictionary object to display the result.