파이썬 collections 모듈의 Counter 클래스

고승우·2023년 5월 15일
0
post-thumbnail

파이썬 collections 모듈의 Counter 클래스

collection 모듈의 Counter 클래스는 python의 dictionary를 기반으로 만들어 졌고, 컨테이너 안의 데이터를 편리하고 빠르게 개수를 세도록 지원하는 계수기 도구이다. Counter 클래스는 별도의 패키지 설치 없이 이용이 가능하다.

from collections import Counter

Counter 생성자는 여러 형태의 데이터를 인자로 받는다. 먼저 중복된 데이터가 저장된 배열을 인자로 넘기면 각 원소가 몇 번씩 나오는지가 저장된 객체를 얻게 된다.

  • 리스트(list)를 입력 받으면 각 원소가 몇 번씩 나오는지가 저장된 객체를 얻게 된다.
Counter(["red", "blue", "red", "red", "yellow", "blue"])
-> Counter({'red': 3, 'blue': 2, 'yellow': 1})
  • 문자열(str)을 입력 받으면 각 문자가 문자열에서 몇 번씩 나타나는지를 알려주는 객체를 반환한다.

Counter("hamburger")
-> Counter({'r': 2, 'h': 1, 'a': 1, 'm': 1, 'b': 1, 'u': 1, 'g': 1, 'e': 1})

Counter 클래스의 다양한 활용법

  • 덧셈 연산

    a = Counter("aaaa")
    b = Counter("bbba")
    print(a)
    print(b)
    print(a + b)
    -> Counter({'a': 4})
    Counter({'b': 3, 'a': 1})
    Counter({'a': 5, 'b': 3})

  • 뺄셈 연산

    a = Counter("aaaa")
    b = Counter("bbba")
    print(a)
    print(b)
    print(a - b)
    -> Counter({'a': 4})
    Counter({'b': 3, 'a': 1})
    Counter({'a': 3})

  • 교집합(&) 합집합(|) 연산

    a = Counter("aaaa")
    b = Counter("bbba")
    print(a)
    print(b)
    print(a & b)
    print(a | b)
    -> Counter({'a': 4})
    Counter({'b': 3, 'a': 1})
    Counter({'a': 1})
    Counter({'a': 4, 'b': 3})

  • in 문법 사용이 가능하다

    a = Counter("aaaab")
    "b" in a
    -> True

Counter의 주요 메소드

elements()

입력된 값의 요소를 무작위로 풀어서 반환한다. 또한 요소의 총 개수가 1보다 작을 시 반환하지 않는다.

import collections
ex_counter = collections.Counter("I want success")
print(list(ex_counter.elements()))
print(sorted(ex_counter.elements()))    # 정렬
['I', ' ', ' ', 'w', 'a', 'n', 't', 's', 's', 's', 'u', 'c', 'c', 'e']
<br/>[' ', ' ', 'I', 'a', 'c', 'c', 'e', 'n', 's', 's', 's', 't', 'u', 'w']

most_common(n)

most_common(n)함수는 입력된 값의 요소들 중 빈도수(최빈값)을 n개 반환한다. 최빈값을 반환하므로 빈도수가 높은 순으로 상위 n개를 반환하며, 결과값은 Tuple자료형이다.

import collections
ex_counter = collections.Counter(['kim', 'kim', 'park', 'choi', 'kim', 'kim', 'kim', 'choi', 'park', 'choi'])
print(ex_counter.most_common())
print(ex_counter.most_common(2))
print(ex_counter.most_common(1))
 [('kim', 5), ('choi', 3), ('park', 2)]
 [('kim', 5), ('choi', 3)]
 [('kim', 5)]
profile
٩( ᐛ )و 

0개의 댓글