상세 컨텐츠

본문 제목

[PYTHON] 파이썬 collections 모듈(2) Counter

PYTHON/기본

by ranlan 2021. 10. 30. 22:37

본문

728x90

[공식문서] https://docs.python.org/3/library/collections.html

 

collections — Container datatypes — Python 3.10.0 documentation

collections — Container datatypes Source code: Lib/collections/__init__.py This module implements specialized container datatypes providing alternatives to Python’s general purpose built-in containers, dict, list, set, and tuple. namedtuple() factory f

docs.python.org

 

 

Counter란

from collections import Counter

컨테이너에 동일한 자료가 몇개인지 파익하여 dict 형태처럼 반환되는 객체 (*요소 개수가 많은 순서대로 출력)

 

 

Counter()

리스트(list)

lst = ['aa', 'cc', 'dd', 'aa', 'bb', 'ee']
Counter(lst) # Counter({'aa': 2, 'cc': 1, 'dd': 1, 'bb': 1, 'ee': 1})

딕셔너리(dictionary)

collections.Counter({'가': 3, '나': 2, '다': 4})) # Counter({'다': 4, '가': 3, '나': 2})

문자열(string)

container = Counter()
container.update("aabcdeffgg")
container # Counter({'a': 2, 'f': 2, 'g': 2, 'b': 1, 'c': 1, 'd': 1, 'e': 1})

값=개수 형태로 입력하여 리스트 반환

counts = Counter(a=2, b=3, c=2)
Counter(counts) # Counter({'b': 3, 'a': 2, 'c': 2}) * 개수가 많은 것부터 반환
sorted(counts.elements()) # ['a', 'a', 'b', 'b', 'b', 'c', 'c']

 

 

Counter.메서드()

update(): Counter의 값 갱신, 입력값에 문자열 형태도 가능

## 문자열 입력
counter = collections.Counter()
counter # Counter()
counter.update("abcdefg")
counter # Counter({'f': 1, 'e': 1, 'b': 1, 'g': 1, 'c': 1, 'a': 1, 'd': 1})

## 딕셔너리 입력
counter.update({'f':3, 'e':2})
counter # Counter({'f': 4, 'e': 3, 'b': 1, 'g': 1, 'c': 1, 'a': 1, 'd': 1})

elements(): 입력된 값의 요소에 해당하는 무작위 반하며 요소 수가 1보다 작을 경우 출력하지 않음, 대소문자 구별

counters = Counter("Hello Python")
list(counters.elements()) # ['H', 'e', 'l', 'l', 'o', 'o', ' ', 'P', 'y', 't', 'h', 'n']
sorted(counters.elements()) # [' ', 'H', 'P', 'e', 'h', 'l', 'l', 'n', 'o', 'o', 't', 'y']

most_common(n): 빈도수가 높은 순으로 상위 n개 튜플 형태로 반환, n이 없을 시 전체 반환

counters = Counter('apple, orange, grape') 
counters.most_common() # [('a', 3), ('p', 3), ('e', 3), (',', 2), (' ', 2), ('r', 2), ('g', 2), ('l', 1), ('o', 1), ('n', 1)]
counters.most_common(3) # [('a', 3), ('p', 3), ('e', 3)]

c1.substract(c2): 차집합과 비슷하게 c1에서 c2 요소를 뺌, 없는 경우 -1로 반환

c1 = Counter('hello python')
c2 = Counter('i love python')
c1.subtract(c2)
c1 # Counter({'h': 1, 'l': 1, 'e': 0, 'o': 0, 'p': 0, 'y': 0, 't': 0, 'n': 0, ' ': -1, 'i': -1, 'v': -1})

 

 

Couter의 산술/집합 연산

c1 = collections.Counter(['a', 'b', 'c', 'b', 'd', 'a'])
c2 = collections.Counter('aaeroplane')
c1 # Counter({'b': 2, 'a': 2, 'd': 1, 'c': 1})
c2 # Counter({'a': 3, 'e': 2, 'n': 1, 'r': 1, 'o': 1, 'p': 1, 'l': 1})

덧셈(+)

c1 + c2
# Counter({'a': 5, 'b': 2, 'e': 2, 'n': 1, 'l': 1, 'd': 1, 'r': 1, 'o': 1, 'p': 1, 'c': 1})

뺄셈(-)

c1 - c2 # Counter({'b': 2, 'c': 1, 'd': 1}

교집합(&) 

c1 & c2 # Counter({'a': 2})

합집합(|)

c1 | c2
# Counter({'a': 3, 'b': 2, 'e': 2, 'c': 1, 'd': 1, 'r': 1, 'o': 1, 'p': 1, 'l': 1, 'n': 1})
728x90

관련글 더보기

댓글 영역