본문 바로가기
Programming/- Python

[Python] Collections : 개수 세기 (Counter)

by 완벽주의탈피 2022. 5. 10.

간단한 라이브러리를 사용하여 딕셔너리의 개수 세기

문자열에서 사용되는 알파벳의 개수를 세거나 해시 문제를 풀 때 유용하니 기억하자

 

참고 : https://docs.python.org/3/library/collections.html#collections.Counter

 

 


 

 

Collections 라이브러리


  • 파이썬의 list, tuple, dict에서 확장된 기능 제공
  • import collections : collections.Counter로 사용
  • from collections import Counter : Counter로 바로 사용 가능

 

# Collections

import collections

from collections import Counter

 

 

Counter (딕셔너리 개수 세기)


  • dict의 subclass
  • 데이터의 개수를 세서 반환 (데이터가 key, 개수가 value)
  • 없는 key는 에러가 아닌 0으로 반환

 

# Counter

from collections import Counter

mystr = 'hellokrapeun'
mycount = Counter(mystr)

print(mycount)
# Counter(['e' : 2, 'l' : 2, 'h' : 1, 'o' : 1, 'k' : 1, 'r' : 1, 'a' : 1, 'p' : 1, 'u' : 1, 'n' : 1])

print(mycount('z'))
# 0

 

 

1. Counter - 계산 연산자


  • 두 개의 객체를 연산
  • 비교 연산자 (equality / inclusion) : 비교 후 True/False 반환
  • += / -= (add / subtract) : 두 값을 더하거나 뺌 (음수가 되면 무시) 
  • &= (intersection) : 최솟값 반환 (교집합)
  • |= (union) : 최댓값 반환 (합집합)

 

# Counter - 계산 연산자 (1)

mycnt1 = Counter(a = 3, b = 1)
mycnt2 = Counter(a = 1, b = 2)

print(mycnt1 == mycnt2)	# False
print(mycnt1 <= mycnt2)	# False

mycnt1 += mycnt2	# mycnt1 = Counter({'a' : 4, 'b' : 3})
mycnt1 -= mycnt2	# mycnt1 = Counter({'a' : 2})
mycnt1 &= mycnt2	# mycnt1 = Counter({'a' : 1, 'b' : 1})
mycnt1 |= mycnt2	# mycnt1 = Counter({'a' : 3, 'b' : 2})

 

  • 단항 연산자 (+, -) : value에 +/-를 붙임
  • 음수인 값은 무시

 

# Counter - 계산 연산자 (2)

mycnt = Counter(a = 2, b = -4)

+mycnt	# Count({'a' : 2})	--> (a = 2, b = -4)이므로 b는 무시
-mycnt	# Count({'b' : 4})	--> (a = -2, b = 4)이므로 a는 무시

 

 

2. Counter - elements()


  • dict의 subclass
  • Counter(list).elements() : 요소들 반환
  • 0보다 작거나 같으면 무시

 

# Counter - elements

from collections import Counter

mycnt = Counter(a = 4, b = 2, c = 0, d = -2)

sorted(c.elements())
# [a, a, a, a, b, b]

 

 

3. Counter - most_common()


  • 가장 많이 사용된 순서대로 정렬하여 tuple 형태로 반환 (동일한 요소는 나온 순서대로)
  • Counter(list).most_common(n) : 상위 n개 반환

 

# Counter - most_common

from collections import Counter

mystr = 'hellokrapeun'
mycount = Counter(mystr)

print(mycount.most_common())
# Counter(['e' : 2, 'l' : 2, 'h' : 1, 'o' : 1, 'k' : 1, 'r' : 1, 'a' : 1, 'p' : 1, 'u' : 1, 'n' : 1])

print(mycount.most_common(2))
# Counter(('e', 2), ('l', 2))

 

 

4. Counter - subtract()


  • 요소들의 뺄셈을 반환
  • Counter(list).subtract(n) : 뺄셈 결과 반환, 음수도 가능

 

# Counter - subtract

from collections import Counter

mystr1 = 'hello'
mystr2 = 'hibye'

mycount1 = Counter(mystr1)
mycount2 = Counter(mystr2)

mycount1.subtract(mycount2)

print(mycount1)
# Counter(['h' : 0, 'e' : 0, 'l' : 2, 'o' : 1, 'i' : -1, 'b' : -1, 'y' : 1])

 

 

5. Counter - total()


  • 요소의 총 개수를 반환
  • Counter(list).total() : 총 개수

 

# Counter - total

from collections import Counter

mystr = 'hellokrapeun'
mycount = Counter(mystr)

print(mycount.total())
# 12

 

댓글