[Python] collections.Counter 의 사용법

mj·2024년 5월 28일
0

Python

목록 보기
2/4

Counter 클래스는 한 객체 안에 요소가 몇 개 들어있는지 세어주는 편리함을 제공한다.

Counter를 사용한 알고리즘
[Baekjoon] 10816. 숫자카드2
[Programmers] 귤 고르기


사용


collections모듈의 Counter 클래스는 별도 패키지 없이 import해서 사용할 수 있다.

from collections import Counter

요소의 개수 세기 - 배열

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

ex_list = ['kim', 'kim', 'park', 'choi', 'kim', 'kim', 'kim', 'choi', 'park', 'choi']
ex_counter = Counter(ex_list)
print(ex_counter) 
print(type(ex_counter)) 
# 출력
Counter({'kim': 5, 'choi': 3, 'park': 2})
<class 'collections.Counter'>

시간복잡도
Counter 클래스는 입력값을 순회하면서 연산을 수행하므로 N개의 원소를 가진 리스트를 한 번 순회하면서 Counter 객체를 구성하는 데 O(N) 시간이 걸린다.

key와 value 출력하기

# ex_counter = Counter({'kim': 5, 'choi': 3, 'park': 2})
for i in ex_counter:
    print(i, end=" ") 
    
#출력
kim park choi

for i in ex_counter:
    print(ex_counter[i], end=" ")
    
#출력
5 2 3

요소가 많은 순서대로 출력되지는 않는다. 순서대로 출력하기 위해서는 most_common()또는 sorted()의 key를 설정하는 방법을 이용한다.

요소가 많은 순서대로 정렬하기

counter.most_common()

x = Counter({'a':3, 'b':7, 'c':1})
x = x.most_common()
print(x)
# [('b', 7), ('a', 3), ('c', 1)]

가장 빈도가 많은 요소 확인하기

x.most_common(1)
# [('b', 7)]

sorted의 key 이용하기 - lambda
x.items()를 가져와 각 item(key, value)의 value를 기준으로 정렬한다.

x = Counter({'a':3, 'b':7, 'c':1})
x = sorted(x.items(), key = lambda i : i[1], reverse=True )
print(x)
# [('b', 7), ('a', 3), ('c', 1)]
profile
일단 할 수 있는걸 하자.

0개의 댓글