collections 모듈의 Counter 클래스

정리 이유

완주하지 못한 선수 문제 풀이에서 처음 본 모듈이기 때문에 익히고 잊지 않기 위해 정리해둔다.

Counter 클래스

  • Counter 객체는 아이템에 대한 개수를 계산해 딕셔너리로 리턴한다.
  • Counter 객체가 리턴하는 딕셔너리의
  • 키에는 아이템의 값이
  • 값에는 해당 아이템의 개수가 들어간다.

Counter 객체 사용

1
2
3
4
import collections
arr = [1,2,3,4,5,5,5,6,6]
cnt = collections.Counter(arr)
print(cnt)

위의 코드는 아래와 같은 Counter 객체를 출력한다.

Counter({5: 3, 6:2, 1: 1, 2: 1, 3: 1, 4: 1})
5가 3개, 6이 2개, 1이 1개, 3이 1개, 4가 1개로 개수가 많은 것부터 출력된다.


Counter 객체에서 가장 빈도수가 높은 요소를 추출하고 싶다면

most_common(1) 함수를 사용한다.

1
print(cnt.most_common(1))

위의 코드는 [(5,3)]와 같이 (가장 높은 빈도를 가지는 아이템, 그 아이템의 개수)가 튜플로 묶여 출력된다.

가장 빈도가 높은 n개의 요소를 추출하고 싶다면

most_common(n) 함수를 사용한다.

1
print(cnt.most_common(2))

위의 코드는 [(5,3), (6,2)]를 출력한다.

most_common() 안에 매개변수를 넣지 않는다면

1
print(cnt.most_common())

[(5, 3), (6, 2), (1, 1), (2, 1), (3, 1), (4, 1)]와 같이 모든 요소가 출력된다.


dictionary와 관련된 특수한 형태의 컨테이너 자료형

  • collections.defaultdict 클래스를 가지는 defaultdict 객체
  • collections.Counter 클래스를 가지는 Counter 객체
  • collections.OrderdDict 클래스를 가지는 OrderedDict 객체

참고 자료

  • 파이썬 알고리즘 인터뷰 p132-p134