   # Python Counter - Count the elements of a list or tuple

You can count the elements in a list or tuple using the `Counter` class from Python 3.1.

``````from collections import Counter

a = ['in', 'in', 'of', 'of', 'of', 'with']

c = Counter(a)

print(c)  # Counter({'of': 3, 'in': 2, 'with': 1})
print(type(c))  # <class 'collections.Counter'>
``````

The Counter class is a dict subclass and the number of elements are its values.

## Create the Counter object from a tuple

``````from collections import Counter

t = ('a', 'a', 'b')
c = Counter(t)

print(c)
# Counter({'a': 2, 'b': 1})
``````

## Count Elements

``````from collections import Counter

s = ['in', 'in', 'of', 'of', 'of', 'with']
c = Counter(s)

of = c['of']

print(of)  # 3
``````

In case the counter doesn't contain a given element, the count is zero.

``````from collections import Counter

s = ['in', 'in', 'of', 'of', 'of', 'with']
c = Counter(s)

the = c['the']

print(the)  # 0
``````

## Append and update the Counter object

``````from collections import Counter

c = Counter(x=3, y=2)

print(c)
# Counter({'x': 3, 'y': 2})

c['z'] = 1

print(c)
# Counter({'x': 3, 'y': 2, 'z': 1})
``````

The above is an example of appending and the following is one of updating.

``````from collections import Counter

c = Counter(x=3, y=2)

print(c)
# Counter({'x': 3, 'y': 2})

c['x'] = 1

print(c)
# Counter({'y': 2, 'x': 1})
``````

## Get most common elements and counts

``````from collections import Counter

s = ['a', 'a', 'a', 'b', 'b', 'c']
c = Counter(s)

m = c.most_common()

print(m)  # [('a', 3), ('b', 2), ('c', 1)]

m1 = c.most_common(1)
m2 = c.most_common(2)
m3 = c.most_common(3)
m4 = c.most_common(4)

print(m1)  # [('a', 3)]
print(m2)  # [('a', 3), ('b', 2)]
print(m3)  # [('a', 3), ('b', 2), ('c', 1)]
print(m4)  # [('a', 3), ('b', 2), ('c', 1)]
``````

The most_common(n) method returns the `n` pairs of most common elements and their counts. In case of omitting the argument, it returns all the elements and counts.

## Get all the elements

``````from collections import Counter

c = Counter(a=2, b=1)

elements = c.elements()

print(elements)  # <itertools.chain object at 0x10a32b310>
print(type(elements))  # <class 'itertools.chain'>

s = list(elements)

print(s)  # ['a', 'a', 'b']
``````

## Appending the original list

``````from collections import Counter

s = ['a', 'a', 'b']
c = Counter(s)

print(c)  # Counter({'a': 2, 'b': 1})
print(c['a'])  # 2

s.append('a')

print(c)  # Counter({'a': 2, 'b': 1})
print(c['a'])  # 2
``````

Appending the list doesn't update the counter.