Python -  collections.Counter 모듈

hyeyul·2020년 8월 19일
1

Python

목록 보기
2/2

collections

이 모듈은 파이썬의 범용 내정 컨테이너 dict, list, set 및 tuple에 대한 대안을 제공하는 특수 컨테이너 데이터형을 구현합니다.

collections.Counter()

Counter는 해시 가능한 객체를 세기 위한 dict 서브 클래스입니다. 요소가 딕셔너리 키로 저장되고 개수가 딕셔너리값으로 저장되는 컬렉션입니다. 개수가 0이나 음수를 포함하는 임의의 정수값이 될 수 있습니다.
Counter 클래스는 다른 언어의 백(bag)이나 멀티 셋(multiset)과 유사합니다.

요소는 이터러블로부터 계산되거나 다른 매핑에서 초기화된다

>>> c = Counter()						# 새로운, 빈 계수기
>>> c = Counter('gallahad')				# 이터러블로 계산한 새 계수기
>>> c = Counter({'red':4, 'blue': 2})	# 매핑으로 초기화한 새 계수기 
>>> c = Counter(cats=4, dogs=8)			# 키워드 인자로 초기화한 새 계수기

계수기 객체는 누락된 항목에 대해 KeyError를 발생시키는 대신 0을 반환한다는 점을 제외하고 딕셔너리 인터페이스를 갖는다:

c = Counter(['eggs', 'ham'])
c['bacon']                              # 누락된 요소의 개수는 0
0

개수를 0으로 설정해도 계수기에서 요소가 제거되지 않는다. 완전히 제거하려면 del을 사용해야 한다.

c['sausage'] = 0                        # 개수가 0인 계수기 항목
del c['sausage']                        # del은 실제로 항목을 제거

elements()

개수만큼 반복되는 요소에 대한 이터레이터를 반환합니다. 요소는 처음 발견되는 순서대로 반환됩니다. 요소의 개수가 1보다 작으면 elements()는 이를 무시합니다.

c = Counter(a=4, b=2, c=0, d=-2)
sorted(c.elements())
['a', 'a', 'a', 'a', 'b', 'b']

most_common([n])

n 개의 가장 흔한 요소와 그 개수를 가장 흔한 것부터 가장 적은 것 순으로 나열한 리스트를 반환합니다. n이 생략되거나 None이면, most_common()은 계수기의 모든 요소를 반환합니다. 개수가 같은 요소는 처음 발견된 순서를 유지합니다:

Counter('abracadabra').most_common(3)
[('a', 5), ('b', 2), ('r', 2)]

subtract([iterable-or-mapping])

이터러블이나 다른 매핑 (또는 계수기)으로부터 온 요소들을 뺍니다. dict.update()와 비슷하지만 교체하는 대신 개수를 뺍니다. 입력과 출력 모두 0이나 음수일 수 있습니다.

c = Counter(a=4, b=2, c=0, d=-2)
d = Counter(a=1, b=2, c=3, d=4)
c.subtract(d)
c
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})

일반적인 딕셔너리 메서드를 Counter 객체에 사용할 수 있습니다만, 두 메서드는 계수기에서 다르게 동작합니다.

fromkeys(iterable)

이 클래스 메서드는 Counter 객체에 구현되지 않았습니다.

update([iterable-or-mapping])

요소는 이터러블에서 세거나 다른 매핑(또는 계수기)에서 더해집니다. dict.update()와 비슷하지만, 교체하는 대신 더합니다. 또한, 이터러블은 (key, value) 쌍의 시퀀스가 아닌, 요소의 시퀀스일 것으로 기대합니다.

Counter 객체로 작업하는 일반적인 패턴:

sum(c.values())                 # 모든 개수의 합
c.clear()                       # 모든 개수를 재설정합니다
list(c)                         # 고유한 요소들의 리스트
set(c)                          # 집합으로 변환합니다
dict(c)                         # 일반 딕셔너리로 변환합니다
c.items()                       # (elem, cnt) 쌍의 목록으로 변환합니다
Counter(dict(list_of_pairs))    # (elem, cnt) 쌍의 리스트를 변환합니다
c.most_common()[:-n-1:-1]       # 가장 드문 n 개의 요소
+c                              # 0과 음의 개수를 제거합니다

Counter 객체를 결합하여 멀티 셋(multiset, 개수가 0보다 큰 계수기)을 생성하는 여러 수학 연산이 제공됩니다. 더하기와 빼기는 해당 요소의 개수를 더 하거나 빼서 계수기를 결합합니다. 교집합(intersection)과 합집합(union)은 해당 개수의 최솟값과 최댓값을 반환합니다. 각 연산은 부호 있는 개수를 입력으로 받을 수 있지만, 출력은 개수가 0 이하면 결과에서 제외합니다.

c = Counter(a=3, b=1)
d = Counter(a=1, b=2)
c + d                       # 두 계수기 합:  c[x] + d[x]
Counter({'a': 4, 'b': 3})
c - d                       
Counter({'a': 2})
c & d                       # 교집합:  min(c[x], d[x]) 
Counter({'a': 1, 'b': 1})
c | d                       # 합집합:  max(c[x], d[x])
Counter({'a': 3, 'b': 2})

c = Counter(a=2, b=-4)
+c
Counter({'a': 2})
-c
Counter({'b': 4})

0개의 댓글