푸르미르

collections 모듈의 Counter 클래스 본문

PYTHON, ALGORITHM

collections 모듈의 Counter 클래스

((•_•)) 2021. 1. 3. 16:40

 데이터의 개수를 계산하는데 유용한 collections 모듈의 Counter 클래스

파이썬이 설치가 되어있다면 사용이 가능하다. 단 from collections import Counter 을 해야한다. 

Counter클래스는 리스트나 문자열의 요소의 개수를 세어 딕셔너리 형태로 리턴한다. (요소key:개수value)

 

▷문자열

1
2
3
4
collections import Counter
 
print(Counter('HAHAha'))   #Counter({'H': 2, 'A': 2, 'h': 1, 'a': 1}) 대소문자 구분
print(sorted(Counter('HAHAha').elements())) #['A', 'A', 'H', 'H', 'a', 'h']
cs

 

대소문자를 구분한다.

 

리스트

1
2
3
4
collections import Counter
 
print(Counter(['aa','bb','cc','aa'])) #Counter({'aa': 2, 'bb': 1, 'cc': 1})
print(sorted(Counter(['aa','bb','cc','aa']).elements())) #['aa', 'aa', 'bb', 'cc']
cs

 

sorted함수는 리스트 형태로 정렬을 해주는 함수인데 나중에 다루기로 하고, elements()함수는 요소들을 각 개수 만큼 반환해준다고만 간단히 알고 일단 설명은 조금 이따가 하도록 하겠다.

Counter은 요소의 개수가 많은 순으로 정렬되어 딕셔너리를 반환한다.

 

Counter은 연산이 가능하다. 가능한 연산에는 +, -, |(합집합), &(교집합) 이 있다.

1
2
3
4
5
6
7
8
9
from collections import Counter
 
a=[1,1,1,3,3,3]
b=[2,2,3,3,3,3,3]
 
print(Counter(a)+Counter(b)) #Counter({3: 8, 1: 3, 2: 2})
print(Counter(a)-Counter(b)) #Counter({1: 3}) 2가 -2개이나 음수는 출력되지 않음
print(Counter(a)|Counter(b)) #Counter({3: 5, 1: 3, 2: 2}) 합집합
print(Counter(a)&Counter(b)) #Counter({3: 3}) 교집합, 3이 3개 겹침
cs

 

▷관련 함수들

most_common()함수

 counter.most_common(n): counter의 요소를 세어, 최빈값 n개를 튜플을 요소로 리스트 return.

 

1
2
3
4
5
6
from collections import Counter
 
counter=[1,1,1,2,2,3,3,3,4]
print(Counter(counter).most_common()) #[(1, 3), (3, 3), (2, 2), (4, 1)] 아무런 파라미터도 제공하지 않았을 때
print(Counter(counter).most_common(2)) #[(1, 3), (3, 3)]
 
cs

 

update()함수

 counter.update(갱신할 것):counter의 value를 갱신한다.

 

1
2
3
4
5
6
from collections import Counter
 
counter=Counter([1,1,1,2,2,3,3,3,4])
print(counter) #Counter({1: 3, 3: 3, 2: 2, 4: 1})
counter.update({1:4, 4:25:1}) #새로운 값까지 업데이트, 기존의 요소 추가
print(counter) #Counter({1: 7, 3: 3, 4: 3, 2: 2, 5: 1})
cs

리스트를 업데이트 한다. 

 

1
2
3
4
5
6
from collections import Counter
 
counter2=Counter('Aabc')
print(counter2) #Counter({'A': 1, 'a': 1, 'b': 1, 'c': 1})
counter2.update('AAAdD')
print(counter2) #Counter({'A': 4, 'a': 1, 'b': 1, 'c': 1, 'd': 1, 'D': 1}) 새로운 문자 까지 포함& 기존 문자 추가
cs

문자열 업데이트 한다.

 

elements()함수

 보통 SORTED()함수와 같이 쓰이며 리스트 형태로 요소들을 개수대로 나열하여 반환한다.

 

1
2
3
4
from collections import Counter
 
counter=Counter('Aabc')
print(sorted(counter.elements())) #['A', 'a', 'b', 'c']
cs

 

subtract()함수

counter.subtract(counter2) (=> counter-counter2로 보면 이해하기는 쉬움.)

 요소를 뺀다. -연산과 다르게,음수도 표시 된다.

 

1
2
3
4
5
6
from collections import Counter
 
counter=Counter('Aabc')
counter2=Counter('AAb')
counter.subtract(counter2)
print(counter) #Counter({'a': 1, 'c': 1, 'b': 0, 'A': -1}) 음수도 나옴
cs

 

'PYTHON, ALGORITHM' 카테고리의 다른 글

[python]삽입정렬  (0) 2021.02.18
[python]선택정렬  (2) 2021.02.18
파이썬으로 Linked List 만들기  (3) 2021.02.03
입력 속도를 높이는 방법  (0) 2021.02.02