본문 바로가기
기술스택을 쌓아보자

[파이썬/python] collections.Counter 사용하기

by 소리331 2021. 9. 27.
반응형

함께 풀어보아욥

 

공식문서 번역에 가까운 글이다.

 

Counter란?

A Counter is a dict subclass for counting hashable objects. It is a collection where elements are stored as dictionary keys and their counts are stored as dictionary values.

> Counter는 해시 가능한 객체들 카운팅하는 딕셔너리의 하위클래스 입니다. 구조는 키값으로는 카운팅하고자 하는 값이, 밸류값에는 키값이 몇 개가 있는지 개수 값이 들어갑니다.

딕셔너리의 하위클래스에 해당하니, 딕셔너리의 구조를 가지고 있다.

from collections import Counter

c = Counter("사과", "배", "사과", "배", "배", "사과")
c["사과"]
>>3

c["포도"] #없는 값은 0으로 출력
>>>0

 

Counter 관련 메소드

1. collections.Counter().elements()

c = Counter(a=4, b=2, c=0, d=-2)
print(c.elements())

>>>['a', 'a', 'a', 'a', 'b', 'b']

 

2. collections.Counter().most_common(n)

인자로 들어가는 n은 출력하고자 하는 원소의 개수를 의미한다. 아래에서는 3을 입력하여 가장 많이 언급된 원소 3개에 대한 카운팅 정보를 출력했다. 

Counter('abracadabra').most_common(3)
[('a', 5), ('b', 2), ('r', 2)]

 

3. collections.Counter().subtract(다른 counter)

서로 다른 두개의 Counter의 값을 빼는 형태이다.

c = Counter(a=4, b=2, c=0, d=-2)
d = Counter(a=1, b=2, c=3, d=4)
c.subtract(d)
c
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})

 

Counter가 종종쓰이는 패턴

sum(c.values())                 # total of all counts
c.clear()                       # reset all counts
list(c)                         # list unique elements
set(c)                          # convert to a set
dict(c)                         # convert to a regular dictionary
c.items()                       # convert to a list of (elem, cnt) pairs
Counter(dict(list_of_pairs))    # convert from a list of (elem, cnt) pairs
c.most_common()[:-n-1:-1]       # n least common elements
+c                              # remove zero and negative counts

 

c = Counter(a=3, b=1)
d = Counter(a=1, b=2)
c + d                       # add two counters together:  c[x] + d[x]
Counter({'a': 4, 'b': 3})
c - d                       # subtract (keeping only positive counts)
Counter({'a': 2})
c & d                       # intersection:  min(c[x], d[x]) 
Counter({'a': 1, 'b': 1})
c | d                       # union:  max(c[x], d[x])
Counter({'a': 3, 'b': 2})
c = Counter(a=2, b=-4)
+c
Counter({'a': 2})
-c
Counter({'b': 4})

참고자료

반응형

댓글