Python Collections Counter
목차
Python 2.7과 3.5부터 탑재된 collections
의 Counter
에 대해 알아보도록 하겠습니다.
# Counter
Counter는
dict
의 하위 클래스로key
와 해당 값의 개수를 카운팅한value
형태로 이루어진 해쉬 형태의 오브젝트입니다.value
는 정수 값을 가질 수 있습니다.
1 | from collections import Counter |
Constructing
Counter는 string, dict, argments, list 등 다양한 방법으로 생성할 수 있으며, 소스코드에서 볼 수 있다시피 Counter는 dict의 하위 클래스로 생성시 O(n)
의 시간 복잡도를 가집니다.
1 | c = Counter() # Counter() |
만약 생성하지 않은 키를 조회한다면 0을 반환합니다.
1 | c = Counter(['eggs', 'ham']) # Counter({'eggs': 1, 'ham': 1}) |
Counter는 dict의 하위 클래스이기 때문에 clear()
함수를 이용할 수 있습니다.
1 | c = Counter(a=4, b=2, c=0, d=-2) # Counter({'a': 4, 'b': 2, 'c': 0, 'd': -2}) |
elements()
Counter의 elements() 함수는 key를 해당 value 만큼 반복하여 반환합니다.
1 | c = Counter(a=4, b=2, c=0, d=-2) |
most_common()
Counter의 most_common(N) 함수는 카운팅 값이 높은 순으로 N개의 tuple을 반환합니다. 소스코드를 보면 sort()
함수를 이용하고 있기 때문에 평균 O(nlogn)
의 시간 복잡도를 가지고 있다고 볼 수 있습니다. sort()
에 대한 자세한 사항은 포스팅을 참고해주세요.
1 | Counter('abracadabra').most_common(3) # [('a', 5), ('b', 2), ('r', 2)] |
most_common()[:-N-1:-1]을 이용하면 카운팅 값이 낮은 순으로 N개의 tuple을 가져올 수 있습니다.
1 | c = Counter(a=1, b=2, c=3, d=4, z=3) # Counter({'a': 1, 'b': 2, 'c': 3, 'd': 4, 'z': 3}) |
subtract()
Counter의 A.subtract(B) 함수는 Counter A에서 B의 값을 빼줍니다. 이 때 B의 값이 A에 존재하지 않거나 A의 값이 더 작은 경우 음의 정수값으로 반환합니다. 이 때 +
기호를 앞에 붙여주는 경우 value가 양의 정수인 값만 반환합니다.
1 | c = Counter(a=4, b=2, c=0, d=-2) |
Counter 오브젝트는 서로 더하거나 뺄 수 있습니다. 이 때 빼기의 경우 subtract() 함수와 달리 양의 정수 값만을 반환합니다.
1 | c = Counter(a=4, b=2, c=0, d=-2) |
# 마무리
python Collections
의 Counter
에 대해 알아보았습니다. 더 자세한 사항은 공식문서를 참고하시기 바랍니다.