Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 문자열에서 각 문자의 빈도수 구하는 3가지 방법

텍스트 처리는 머신러닝과 인공지능 분야에서 핵심적인 영역으로 자리 잡았습니다. 파이썬은 다양한 도구와 라이브러리를 통해 이러한 텍스트 처리 작업을 폭넓게 지원합니다. 이 글에서는 주어진 문자열에서 각 문자가 몇 번 나타나는지(빈도) 계산하는 대표적인 세 가지 방법을 살펴보겠습니다.

Counter 클래스 사용

파이썬 collections 모듈의 Counter 클래스는 반복 가능한(iterable) 객체에서 각 요소가 등장한 횟수를 손쉽게 세어 줍니다. 문자열을 그대로 전달하기만 하면 되므로 가장 간결하고 직관적인 방법입니다.

예제

from collections import Counter

# 주어진 문자열
strA = "timeofeffort"
print("주어진 문자열:", strA)

# Counter로 빈도 계산
res = Counter(strA)

# 결과 출력
print("각 문자의 빈도 :\n", res)

실행 결과

주어진 문자열: timeofeffort
각 문자의 빈도 :
Counter({'f': 3, 't': 2, 'e': 2, 'o': 2, 'i': 1, 'm': 1, 'r': 1})

get() 메서드 사용

문자열을 순회하면서 각 문자를 딕셔너리의 키로 다루고, get() 메서드를 활용하면 별도의 라이브러리 없이 빈도를 셀 수 있습니다. get()은 해당 키가 아직 없을 때 기본값(여기서는 0)을 반환하므로 처음 등장하는 문자도 안전하게 처리됩니다.

예제

# 주어진 문자열
strA = "timeofeffort"
print("주어진 문자열:", strA)

# get()을 이용한 빈도 계산
res = {}

for keys in strA:
    res[keys] = res.get(keys, 0) + 1

# 결과 출력
print("각 문자의 빈도 :\n", res)

실행 결과

주어진 문자열: timeofeffort
각 문자의 빈도 :
{'t': 2, 'i': 1, 'm': 1, 'e': 2, 'o': 2, 'f': 3, 'r': 1}

set과 count() 사용

파이썬의 set은 중복 없이 고유한 요소만 저장합니다. 이 특성을 활용해 문자열에 존재하는 고유 문자들을 먼저 추출한 뒤, count() 메서드로 각 문자가 등장하는 횟수를 세면 됩니다. 딕셔너리 컴프리헨션을 사용하면 한 줄로 깔끔하게 작성할 수 있습니다.

예제

# 주어진 문자열
strA = "timeofeffort"
print("주어진 문자열:", strA)

# set과 count()를 이용한 빈도 계산
res = {n: strA.count(n) for n in set(strA)}

# 결과 출력
print("각 문자의 빈도 :\n", res)

실행 결과

주어진 문자열: timeofeffort
각 문자의 빈도 :
{'f': 3, 'r': 1, 'm': 1, 'o': 2, 'i': 1, 't': 2, 'e': 2}

마무리

세 가지 방법 모두 동일한 결과를 얻을 수 있지만 상황에 따라 장단점이 있습니다. Counter는 코드가 가장 간결하고 최적화되어 있어 일반적으로 권장됩니다. get() 방식은 외부 모듈 없이 로직을 직접 제어할 수 있다는 장점이 있으며, set + count() 방식은 코드가 짧지만 문자열이 길어질 경우 문자마다 전체를 다시 탐색하므로 성능이 저하될 수 있습니다. 데이터의 크기와 요구 사항에 맞는 방법을 선택하시기 바랍니다.