[Python] Counter 란?

반응형

Python logo

python을 사용하다 보면 문자열이나 리스트에 대해, 각 항목이 몇 개로 이루어져 있는지 구하고 싶을 때가 있습니다. 딕셔너리를 이용해 코드를 짤 수도 있지만, collections 모듈의 Counter 클래스를 사용한다면 간단하게 구할 수 있습니다.

Counter 클래스는 문자열이나 리스트 등의 배열 형태를 입력으로 받습니다.

 

1. 문자열 Counting

from collections import Counter
Counter('HelloWorld')
# 출력: Counter({'l': 3, 'o': 2, 'H': 1, 'e': 1, 'W': 1, 'r': 1, 'd': 1})

Counter클래스에 문자열을 주면, 출력으로 각 문자가 몇 개나 나오는지 딕셔너리 형태로 출력해줍니다. 즉, Counter 자료형은 기본적으로 딕셔너리입니다. 그렇기 때문에 딕셔너리의 기능들을 사용할 수 있습니다.

 

Counter('HelloWorld')['l'] # 출력: 3

위처럼 바로 'HelloWorld'에서 'l'의 개수를 출력할 수 있습니다.

 

2. 리스트 Counting

li = list('HelloWorld')
print(li) 
# 출력: ['H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd']

print(Counter(li)) 
# 출력: Counter({'l': 3, 'o': 2, 'H': 1, 'e': 1, 'W': 1, 'r': 1, 'd': 1})

위 1. 의 문자열을 list 형태로 바꾼 뒤에, Counter를 사용했습니다. 리스트를 이루는 각 요소의 개수를 딕셔너리 형태로 출력합니다.

 

3. 데이터 많은 순으로 출력 (most_common)

Counter 클래스는 일반적인 딕셔너리와 마찬가지로, 키(key)에 대해 순서가 없습니다.([Python/Python 기초] - [Python] Ordered dict) Counter의 출력으로 빈도수가 많은 키부터 출력하고자 할 때는 most_common() 기능을 사용하면 됩니다. 아래는 위 2. 의 li (리스트 변수)에 대해 Counter와 most_common()을 사용한 결과입니다.

print(Counter(li).most_common())
# 출력: [('l', 3), ('o', 2), ('H', 1), ('e', 1), ('W', 1), ('r', 1), ('d', 1)]

출력은 빈도수가 가장 많은 (키, 값) 쌍을 원소로 갖는 리스트 형태로 출력됩니다. 만약, 가장 빈도수가 많은 (키, 값) 쌍을 2개만 보고 싶다면, 아래와 같이 most_common의 인자로 2를 넣어주면 됩니다.

print(Counter(li).most_common(2))
# 출력: [('l', 3), ('o', 2)]

 

마치며

데이터의 요소 개수를 셀 때, Counter는 요긴하게 쓰입니다. 딕셔너리 형태이기 때문에, 딕셔너리 컴프리헨션 등의 기능과 함께 쓰면 편하게 데이터를 다룰 수 있습니다. [Python/Python 꿀팁] - [Python의 꽃] 리스트 컴프리헨션(List Comprehension) 다음에 더 유익한 글로 찾아오겠습니다. 감사합니다.

 

Python logo: https://ourcodeworld.com/articles/read/734/why-is-python-the-future-of-programming
반응형

댓글

Designed by JB FACTORY