프로그래밍 /Python

[python] Counter

yooj_lee 2021. 12. 9. 04:35
300x250

카운터에 대한 새로운 지식을 알게 되어 글을 적는다. 파이썬 Counter는 collections 라이브러리에 정의되어 있으며, iterator에서 각 요소 별로 몇 번 등장하는지 count해주는 딕셔너리의 서브클래스이다. (엄밀한 표현은, Counter is a dict subclass for counting hashable objects )

cf.) Counter는 딕셔너리이다.
Counter도 딕셔너리이기 때문에 Counter에서 바로 iteration을 수행하면 key값만을 반환한다. 따라서 key, value 쌍이 필요하다면 Counter객체.items() 의 메소드를 활용해서 key, value 쌍을 얻어내야 한다.

 

실제로 많이 사용해보지는 않았는데, Counter 간의 연산이 된다는 사실을 추가적으로 알게 되었다.

위와 같이 counter 간의 뺄셈 연산이 가능하다. 차집합 연산과 비슷하다고 생각하면 된다. count_arr에서 count_arr2와 중복되는 키의 count값을 빼주고 0이 되면 아예 클래스에서 제거되는 형태이다. count_arr2에 등장하는 키가 count_arr에는 등장하지 않는다 해도 무관하다. 어차피 차집합 연산이기 때문이다. 물론, 덧셈도 가능하다.

위의 연산은 count_arr.subtract(count_arr3) 으로도 동일하게 수행된다.

이외에 Counter에서 유용한 연산은 most_common이 있다. most_common 메소드는 k개를 인자로 받는데 즉 최빈값 k개를 리턴해준다고 생각하면 된다.


reference

1. https://docs.python.org/3/library/collections.html#collections.Counter

 

collections — Container datatypes — Python 3.10.1 documentation

collections — Container datatypes Source code: Lib/collections/__init__.py This module implements specialized container datatypes providing alternatives to Python’s general purpose built-in containers, dict, list, set, and tuple. namedtuple() factory f

docs.python.org

2. 프로그래머스 알고리즘 스터디 강의

300x250