How to count the frequency of the elements in an unordered list? How to count the frequency of the elements in an unordered list? python python

How to count the frequency of the elements in an unordered list?


In Python 2.7 (or newer), you can use collections.Counter:

import collectionsa = [1,1,1,1,2,2,2,2,3,3,4,5,5]counter=collections.Counter(a)print(counter)# Counter({1: 4, 2: 4, 3: 2, 5: 2, 4: 1})print(counter.values())# [4, 4, 2, 1, 2]print(counter.keys())# [1, 2, 3, 4, 5]print(counter.most_common(3))# [(1, 4), (2, 4), (3, 2)]print(dict(counter))# {1: 4, 2: 4, 3: 2, 5: 2, 4: 1}

If you are using Python 2.6 or older, you can download it here.


Note: You should sort the list before using groupby.

You can use groupby from itertools package if the list is an ordered list.

a = [1,1,1,1,2,2,2,2,3,3,4,5,5]from itertools import groupby[len(list(group)) for key, group in groupby(a)]

Output:

[4, 4, 2, 1, 2]

update: Note that sorting takes O(n log(n)) time.


Python 2.7+ introduces Dictionary Comprehension. Building the dictionary from the list will get you the count as well as get rid of duplicates.

>>> a = [1,1,1,1,2,2,2,2,3,3,4,5,5]>>> d = {x:a.count(x) for x in a}>>> d{1: 4, 2: 4, 3: 2, 4: 1, 5: 2}>>> a, b = d.keys(), d.values()>>> a[1, 2, 3, 4, 5]>>> b[4, 4, 2, 1, 2]