본문 바로가기
  • Hello_
Python

[Python] collection.Counter() - 숫자 혹은 문자 개수 세기

by LDwDL 2022. 9. 21.
728x90
반응형

오늘은 특정 리스트 내의 숫자 혹은 문자열의 문자 각각의 개수를 손쉽게 리턴해주는 함수에 대해 포스팅하고자 한다.

collection.Counter()

collection 라이브러리 내에 Counter 함수는 입력을 리스트로 받으며 출력은 리스트 내의 인자 각각의 개수를 리턴해준다.

 

[숫자 리스트 입력]

from collections import Counter
import numpy as np

nums_1 = np.random.randint(0,5,100)
print(nums)
"""
[2 3 4 0 2 1 2 2 4 3 4 1 4 1 0 3 4 3 3 2 3 1 2 2 2 3 4 0 2 3 1 1 0 4 2 4 0
 4 3 1 4 0 2 4 2 3 3 1 3 3 3 4 0 3 2 0 1 3 1 3 3 2 2 3 4 1 1 1 3 3 4 1 3 0
 2 3 3 4 3 4 4 0 3 0 4 4 3 1 2 0 1 4 3 2 2 2 1 1 0 1]
"""
Counter(nums)
# Counter({2: 20, 3: 28, 4: 20, 0: 13, 1: 19})

 

출력이 dictionary 형태로 리턴되기 때문에 다음과 같이 보기 원하는 특정 인자들의 개수를 뽑을 수도 있다.

Counter(nums)[3]
# 28

Counter(nums)[0]
# 13

 

[문자로 이뤄진 리스트 입력]

str = 'hello my name is baembaembaem'

Counter(str)
"""
Counter({'h': 1,
         'e': 5,
         'l': 2,
         'o': 1,
         ' ': 4,
         'm': 5,
         'y': 1,
         'n': 1,
         'a': 4,
         'i': 1,
         's': 1,
         'b': 3})
"""

 

문자열을 입력한다면 공백을 포함, 각 문자의 개수를 리턴해준다.

 

Counter 산술 연산자 이용

위와 같은 각 counter들을 산술 연산자를 통해 두 개 이상의 결과를 더하거나 빼서 개수를 파악할 수도 있다.

 

[산술 연산자 이용]

nums_1 = np.random.randint(0,5,10)
nums_2 = np.random.randint(0,5,10)
print(nums_1, nums_2)
# [0 4 1 2 0 4 4 4 2 3] [2 0 4 4 1 2 0 4 1 0]

print(Counter(nums_1),Counter(nums_2))
# Counter({4: 4, 0: 2, 2: 2, 1: 1, 3: 1}) Counter({0: 3, 4: 3, 2: 2, 1: 2})
Counter(nums_1)+Counter(nums_2)
# Counter({0: 5, 4: 7, 1: 3, 2: 4, 3: 1})

Counter(nums_1)-Counter(nums_2)
# Counter({4: 1, 3: 1})

 

 

 

 

728x90
반응형

댓글