[Python] 파이썬 Counter 객체 활용 방법 정리

728x90
반응형

Counter 객체

아이템에 대한 개수를 계산해 딕셔너리로 리턴해주는 아주 유용한 객체이다.

import

Counter 객체는 Python의 collections 모듈에 포함된 해시 가능한 객체의 개수를 셀 때 유용한 클래스이다.
특히 리스트, 문자열 등에서 요소들의 빈도를 쉽게 계산할 수 있게 도와준다.

다음과 같이 임포트 해서 사용한다.

from collectons import Counter

혹은, collections만 import해서 다음과 같이 사용할 수도 있다.

import collections

sample = collections.Counter(a=3, b=2)

 

🔵 주요 기능 및 사용 방법

Counter 생성 및 초기화

Counter는 iterable, dictionary, keyword arguments 등으로 초기화할 수 있다.

from collections import Counter

# 문자열로 초기화
c1 = Counter("hello")  # 결과: {'h': 1, 'e': 1, 'l': 2, 'o': 1}

# 리스트로 초기화
c2 = Counter(['apple', 'banana', 'apple'])  # 결과: {'apple': 2, 'banana': 1}

# 딕셔너리로 초기화
c3 = Counter({'apple': 2, 'banana': 1})

# 키워드 인자로 초기화
c4 = Counter(apple=2, banana=1)

아이템에 대한 개수를 계산해 딕셔너리로 리턴한다.

>>> a = [1, 2, 3, 4, 5, 5, 5, 6, 6]
>>> b = collections.Counter(a)
>>> b
Counter({5:3, 6:2, 1: 1, 2: 1, 3: 1, 4: 1})
  • 아이템의 값: 해당 아이템의 개수
  • 개수를 자동으로 계산해주기 때문에 매우 편리하며, 여러 분야에서 다양하게 활용된다.

 

빈도 조회

Counter는 딕셔너리와 유사하게 키를 사용해 해당 요소의 개수를 반환한다.

없는 요소를 조회하면 자동으로 0을 반환한다.

print(c2['apple'])  # 결과: 2
print(c2['cherry'])  # 결과: 0 (존재하지 않는 키는 0 반환)

 

요소 추가 및 업데이트

update() 메서드를 사용해 요소를 추가하거나 기존 요소의 개수를 증가시킬 수 있다.

c = Counter({'apple': 2, 'banana': 1}) 
c.update(['apple', 'banana', 'cherry']) # apple: 3, banana: 2, cherry: 1

 

Counter 연산

  • 덧셈: 두 Counter 객체를 더하면 각각의 키에 대해 값이 더해진 결과가 나온다.
  • 뺄셈: 두 Counter 객체를 빼면 값이 감소하지만, 음수는 제외된다.
  • 교집합: 두 Counter 객체 간의 공통된 키 중 최소값을 유지한다.
  • 합집합: 두 Counter 객체 간의 공통된 키 중 최대값을 유지한다.
c1 = Counter(a=3, b=1)
c2 = Counter(a=1, b=2, c=1)

print(c1 + c2)  # 덧셈: Counter({'a': 4, 'b': 3, 'c': 1})
print(c1 - c2)  # 뺄셈: Counter({'a': 2}) (음수는 제외됨)
print(c1 & c2)  # 교집합: Counter({'a': 1, 'b': 1})
print(c1 | c2)  # 합집합: Counter({'a': 3, 'b': 2, 'c': 1})

 

 

🪄 가장 빈도 수가 높은 요소 추출

most_common() 메서드를 사용하면 가장 빈도가 높은 요소들을 튜플 형태로 반환한다.

c = Counter("abracadabra") 
print(c.most_common(2)) # [('a', 5), ('b', 2)]
>>> b.most_common(2) # 가장 빈도가 높은 2개의 요소 추출
[(5, 3), (6, 2)]

 

@danger
주의!! 뺄셈의 결과로 0이나 음수가 나온 경우에는 최종 카운터 객체에서 제외된다.

 

0 이하의 요소 제거

Counter는 양수가 아닌 값의 키도 포함할 수 있다. 특정 상황에서 0 이하의 요소를 제거하려면 + 연산을 사용하면 된다.

c = Counter(a=3, b=0, c=-1) 
c += Counter() 			# 0 이하의 요소 제거 
print(c) 				# Counter({'a': 3})

 

요약

  • Counter는 요소의 빈도를 쉽게 셀 수 있는 강력한 도구이다.
  • 딕셔너리와 유사하지만, 특히 집합 연산 및 요소 빈도 계산에 최적화되어 있다.
728x90
반응형