[python] collections 모듈의 Counter 클래스

Minhee kang·2021년 6월 28일
1

Python

목록 보기
1/25
post-thumbnail

🔍 공식 문서 🔍

from collections import Counter  

print(Counter('hi python kkk'))  # Counter({'k': 3, 'h': 2, ' ': 2, 'i': 1, 'p': 1, 'y': 1, 't': 1, 'o': 1, 'n': 1})
print(Counter([1,2,3,4,1,2,5,6,7,8,9,10])) #Counter({1: 2, 2: 2, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1, 9: 1, 10: 1})
print(Counter(((1,3), (1,3), (3,1)))) #Counter({(1, 3): 2, (3, 1): 1})


#Counter클래스는 데이터의 개수가 많은 순으로 
#정렬된 리스트를 리턴하는 most_common이라는 메서드를 제공

print(Counter('hi python kkk').most_common()) #[('k', 3), ('h', 2), (' ', 2), ('i', 1), ('p', 1), ('y', 1), ('t', 1), ('o', 1), ('n', 1)]
print(Counter([1,2,3,4,1,2,5,6,7,8,9,10]).most_common()) #[(1, 2), (2, 2), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1), (10, 1)]
print(Counter(((1,3), (1,3), (3,1))).most_common()) #[((1, 3), 2), ((3, 1), 1)]

#이 메서드의 인자로 숫자 K를 넘기면 
#그 숫자 만큼만 리턴하기 때문에, 
#가장 개수가 많은 K개의 데이터를 얻을 수도 있습니다.
print(Counter('hi python kkk').most_common(1)) # [('k', 3)]
print(Counter([1,2,3,4,1,2,5,6,7,8,9,10]).most_common(2)) #[(1, 2), (2, 2)]
print(Counter(((1,3), (1,3), (3,1))).most_common(3)) #[((1, 3), 2), ((3, 1), 1)] -> 개수 넘어가면 그냥 전체 출력

📒 Counter에 키가 없을 경우

#Counter에서 존재하지 않는 키의 값의 default값은 0
#Counter에서 존재하지 않는 키의 값을 변경하면 키와 값이 생성됨

from collections import Counter 
need = Counter(['A', 'C', 'C'])
print(need['B'])   #0

missing = 7
missing -= need['C'] > 0 # a > b 하면 True(=1), False(=0)반환
print(missing)   #6
missing -= need['K']
print(missing)   #6

need['B'] -= 1
print(need)   #Counter({'C': 2, 'A': 1, 'B': -1})

📒 Counter의 연산과 메서드

from collections import Counter 

a_counter = Counter("AABC")
b_counter = Counter("BBBCC")

print(a_counter)   #Counter({'A': 2, 'B': 1, 'C': 1})
print(b_counter)   #Counter({'B': 3, 'C': 2})

#1. 두 카운터 +, - 연산
print(a_counter + b_counter)   #Counter({'B': 4, 'C': 3, 'A': 2})
print(a_counter - b_counter)   #Counter({'A': 2})

#=>+,-연산에서 값이 0 이하면 아이템을 목록에서 제거함
counter = Counter({'A': 3, 'B': 0, 'C': -1})
print(counter)     #Counter({'A': 3, 'B': 0, 'C': -1})
counter += Counter({'C': 2})
print(counter)     #Counter({'A': 3, 'C': 1})
counter += Counter({'C': -5})
print(counter)    #Counter({'A': 3})


#2. subtract 메서드
# subtract([iterable-or-mapping])
a_counter.subtract(b_counter)
print(a_counter)       #Counter({'A': 2, 'C': -1, 'B': -2})
a_counter += b_counter
print(a_counter)       #원래 상채로 돌려놓음 a_counter = Counter({'A': 2, 'B': 1, 'C': 1})

a_counter.subtract('A')
print(a_counter)    #Counter({'A': 1, 'B': 1, 'C': 1})

#3. &(교집합)과 |(합집합)
print(a_counter & b_counter)   #Counter({'B': 1, 'C': 1})  
print(a_counter | b_counter)   #Counter({'B': 3, 'A': 2, 'C': 2})  

#4. 메서드 elements(): 카운터 된 숫자만큼의 요소를 return
print(list(a_counter.elements()))   ##Counter({'A': 2, 'B': 1, 'C': 1})

📒 Counter를 사용한 핵

from collections import Counter 

#빈 Counter()을 더하면 값이 0 이하인 아이템을 목록에서 아예 제거함

counter = Counter({'A': 3, 'B': 0, 'C': -1})
print(counter)     #Counter({'A': 3, 'B': 0, 'C': -1})

counter += Counter()
print(counter)     #Counter({'A': 3})

0개의 댓글