728x90
반응형
Counter는 딕셔너리와 비슷하지만, 딕셔너리를 확장한 특화된 자료구조입니다. Python의 collections 모듈에서 제공하는 자료구조로, 요소의 개수를 자동으로 세는 데 최적화되어 있습니다.
Counter와 dict의 공통점
1. 키-값 저장:
Counter도 딕셔너리처럼 키와 값을 저장합니다.
키는 요소를, 값은 해당 요소의 개수를 나타냅니다.
from collections import Counter
c = Counter("hello")
print(c) # Counter({'l': 2, 'h': 1, 'e': 1, 'o': 1})
2. 딕셔너리 메서드 지원:
keys(), values(), items() 등의 메서드를 사용할 수 있습니다.
print(c.keys()) # dict_keys(['h', 'e', 'l', 'o'])
print(c.values()) # dict_values([1, 1, 2, 1])
print(c.items()) # dict_items([('h', 1), ('e', 1), ('l', 2), ('o', 1)])
3. 인덱싱:
딕셔너리처럼 키로 값을 조회할 수 있습니다.
print(c['l']) # 2
print(c['z']) # 0 (존재하지 않는 키의 기본값은 0)
4. 반복문:
딕셔너리처럼 for key in Counter 형태로 키를 반복할 수 있습니다.
for key in c:
print(key, c[key])
# 출력:
# h 1
# e 1
# l 2
# o 1
Counter와 dict의 차이점
1. 값의 기본값:
Counter는 존재하지 않는 키의 값을 기본적으로 0으로 반환합니다.
일반 딕셔너리는 존재하지 않는 키를 조회하면 KeyError를 발생시킵니다.
c = Counter("hello")
print(c['z']) # 0 (존재하지 않는 키지만 기본값이 0)
d = {}
# print(d['z']) # KeyError
2. 요소 개수를 자동으로 세기:
Counter는 요소의 개수를 자동으로 계산합니다.
c = Counter("hello")
print(c) # Counter({'l': 2, 'h': 1, 'e': 1, 'o': 1})
3. 수학 연산 지원:
Counter는 덧셈, 뺄셈, 교집합, 합집합 등의 수학 연산을 지원합니다.
c1 = Counter("hello")
c2 = Counter("world")
print(c1 + c2) # Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, 'w': 1, 'r': 1, 'd': 1})
print(c1 - c2) # Counter({'l': 2, 'h': 1, 'e': 1})
print(c1 & c2) # Counter({'l': 1, 'o': 1})
print(c1 | c2) # Counter({'l': 2, 'o': 1, 'h': 1, 'e': 1, 'w': 1, 'r': 1, 'd': 1})
4. 특화된 메서드:
- Counter는 딕셔너리에는 없는 메서드를 제공합니다.
- 예: elements(), most_common(), subtract().
c = Counter("hello")
# elements() → 요소를 빈도만큼 반복
print(list(c.elements())) # ['h', 'e', 'l', 'l', 'o']
# most_common() → 가장 빈도가 높은 요소
print(c.most_common(1)) # [('l', 2)]
# subtract() → 요소 개수 빼기
c.subtract("ell")
print(c) # Counter({'l': 1, 'h': 1, 'o': 1, 'e': 0})
언제 Counter를 사용해야 할까?
1. 요소의 빈도 계산:
문자열, 리스트, 튜플 등에서 각 요소가 몇 번 등장했는지 계산할 때 유용합니다.
c = Counter("banana")
print(c) # Counter({'a': 3, 'n': 2, 'b': 1})
2. 차집합 계산:
두 컬렉션 간의 요소 차이를 구할 때 편리합니다.
c1 = Counter("banana")
c2 = Counter("apple")
print(c1 - c2) # Counter({'n': 2, 'b': 1})
3. 가장 빈도 높은 요소 찾기:
데이터를 정렬하지 않고도 가장 많이 등장한 요소를 빠르게 찾을 수 있습니다.
c = Counter([1, 2, 3, 1, 2, 1])
print(c.most_common(1)) # [(1, 3)]
4. 데이터 합치기 및 연산:
- 여러 카운터를 합치거나 연산할 때 간결하게 처리할 수 있습니다.
'Category > Python' 카테고리의 다른 글
| Python에서 집합(set) 생성과 초기값 설정법 (0) | 2024.11.27 |
|---|---|
| Python collections 모듈의 defaultdict 사용하기 (0) | 2024.11.22 |
| Python의 collections 모듈 사용하기 (0) | 2024.11.20 |
| Python에서 heapq로 최대힙, 최소힙 구현하기 (0) | 2024.11.18 |
| 파이썬 정렬 함수 sort()와 sorted() 차이점 (0) | 2024.11.18 |