본문 바로가기
알고리즘

[파이썬] Counter 클래스 사용법

by 자바지기 2021. 9. 8.
반응형

collections 모듈의 Counter 클래스 사용법을 알아본다.

Counter 클래스는 데이터의 개수를 셀 때 사용하면 편리하다.

 

Counter 클래스를 알기 전에는 dictionary를 이용하여 카운팅을 하였다.

예를 들어 "collections"라는 문자열에 있는 각 알파벳의 수를 구해보자.

def counter(word):
    word_count= {}
    for s in word:
        if s not in word_count:
            word_count[s] = 1
        else:
            word_count[s] += 1
    return word_count

print(counter("collections")) #{'c': 2, 'o': 2, 'l': 2, 'e': 1, 't': 1, 'i': 1, 'n': 1, 's': 1}

위의 코드는 Counter 클래스를 사용하면 훨씬 간결하게 작성할 수 있다.

from collections import Counter

print(Counter("collections"))  # Counter({'c': 2, 'o': 2, 'l': 2, 'e': 1, 't': 1, 'i': 1, 'n': 1, 's': 1})

 

훨씬 간단하지만 같은 결과를 출력함을 알 수 있다. 


Counter 클래스의 입력값을 알아보자

 

Counter 클래스의 입력값에는 문자열뿐만 아니라 리스트, 딕셔너리, 값=개수 형태가 올 수 있다.

리스트는 입력값이 문자열일 때와 똑같이 작동한다.

 

입력값에 딕셔너리 형태를 넣어주면 요소의 개수가 많은 것부터 출력한다.

from collections import Counter

print(Counter({'a': 1, "b" : 2, "c": 3}))   # Counter({'c': 3, 'b': 2, 'a': 1})

 

또한 값 = 개수 형태도 Counter의 입력값으로 가능하다.

예를 들어 입력값으로 a=1, b = 2, c = 3을 넣어보면 다음과 같다.

from collections import Counter

print(Counter(a=1,b=2,c=3)) # Counter({'c': 3, 'b': 2, 'a': 1})

이 또한 딕셔너리의 형태로 반환된다.

 


이제 Counter 클래스의 메소드를 알아보자.

 

1. elements()

from collections import Counter
c = Counter(a=1,b=2,c=3)
print(list(c.elements())) #['a', 'b', 'b', 'c', 'c', 'c']

요소를 해당하는 값만큼 풀어서 반환한다. 요소는 무작위로 반환하고 요소의 개수가 1보다 작으면 출력되지 않는다. 

 

2. update()

from collections import Counter
c = Counter(a=1,b=2,c=3)
c.update(a=2,b=3,c=4)
print(c)   # Counter({'c': 7, 'b': 5, 'a': 3})

말 그대로 Counter 값을 update하는 것이다. 

위의 코드의 결과처럼 각 요소를 update한다.

 

3. most_common(n)

from collections import Counter
c = Counter(a=1,b=2,c=3)
print(c.most_common(2)) # [('c', 3), ('b', 2)]

많이 등장한 순서대로 n개만큼 반환한다.

 

4. subtract()

from collections import Counter
c1 = Counter(a=1, b=2, c=3)
c2 = Counter(a=2, b=1, c=2)
c1.subtract(c2)
print(c1) # Counter({'b': 1, 'c': 1, 'a': -1})

말 그대로 요소를 빼는 것이다. 위 코드의 a와 같이 음수의 값이 출력될 수 있다. 

subtract()는 반환 값이 없다. 

 


다음은 Counter를 이용한 연산이다. Counter는 +, -, &, |  연산을 실행할 수 있다.

from collections import Counter
c1 = Counter(a=1, b=2, c=3)
c2 = Counter(a=2, b=1, c=2)

print(c1 + c2) # Counter({'c': 5, 'a': 3, 'b': 3})
print(c1 - c2) # Counter({'b': 1, 'c': 1})  #음수 값은 출력되지 않는다.
print(c1 & c2) # Counter({'c': 2, 'a': 1, 'b': 1})
print(c1 | c2) # Counter({'c': 3, 'a': 2, 'b': 2})

 

반응형

'알고리즘' 카테고리의 다른 글

[파이썬] asterisk( * )  (0) 2021.10.19
[파이썬] bisect 라이브러리  (0) 2021.09.26
[파이썬] heapq 라이브러리  (0) 2021.09.26
[파이썬] itertools 라이브러리  (0) 2021.09.26
정수에 대한 유클리드 호제법  (0) 2021.09.07

댓글