HOWTO · Python
Python에서 문자열의 문자 발생 횟수 계산
Python 문자열에서 특정 문자의 개수를 `str.count()`로 세는 방법과 모든 문자 빈도를 확인하거나 반복문·정규식으로 세는 대안을 알아봅니다.
이 페이지의 내용
Python 문자열에서 특정 문자의 개수를 str.count()로 셀 수 있습니다. 대소문자를 구분하며 부분 문자열도 셉니다. 부분 문자열이 겹치는 경우는 중복해서 세지 않습니다. 모든 문자의 빈도가 필요하면 collections.Counter를, 사용자 지정 처리가 필요하면 반복문을, 패턴 매칭이 필요하면 정규식을 사용하세요.
str.count()로 문자 하나의 개수 세기
내장 문자열 메서드 str.count()는 문자 하나나 부분 문자열이 그대로 몇 번 나타나는지 셀 때 가장 간단한 방법입니다. 검색할 텍스트를 전달하면 겹치지 않는 일치 항목의 개수를 반환합니다. 대소문자를 구분하므로 "p"와 "P"를 세면 각각 다른 결과가 나옵니다.
이 독립 실행형 예제는 짧은 문자열에서 소문자 l의 개수를 셉니다. text와 target을 원하는 값으로 바꾸면 됩니다. 여러 문자로 된 대상을 지정해도 같은 메서드가 겹치지 않는 부분 문자열의 개수를 셉니다.
text = "hello, world!"
target = "l"
count = text.count(target)
print(count)
예를 들어, "aaaa".count("aa")의 결과는 2입니다. 일치 항목이 서로 겹치지 않기 때문입니다. 겹치는 부분 문자열까지 세려면 패턴 기반 방법을 사용하고, 원하는 일치 방식을 명확하게 정하세요.
collections.Counter로 모든 문자 세기
Python의 collections 모듈에 있는 collections.Counter는 문자열을 포함한 반복 가능한 객체에서 문자 빈도표를 만듭니다. 문자 하나뿐 아니라 여러 문자의 개수가 필요할 때 유용합니다. 대괄호로 특정 문자의 개수를 조회할 수 있으며, 입력에 없는 문자의 개수는 0입니다.
from collections import Counter
text = "hello, world!"
counts = Counter(text)
print(counts["l"])
print(counts)
첫 번째 조회는 문자 하나의 개수를 알려 주고, Counter 객체에는 문자열 전체의 문자별 개수가 담깁니다. counts.most_common()으로 자주 등장하는 항목을 확인할 수 있습니다. 이 방법은 Python 표준 라이브러리만 사용하므로 NumPy나 다른 외부 패키지가 필요하지 않습니다.
반복문이나 컴프리헨션으로 개수 세기
명시적인 반복문은 비교와 개수 증가 과정을 드러내므로, 추가 조건이나 사용자 지정 처리를 포함해 세어야 할 때 유용합니다. 개별 문자를 세려면 대상은 한 글자로 된 문자열이어야 합니다.
text = "hello, world!"
target = "l"
count = 0
for character in text:
if character == target:
count += 1
print(count)
더 간결하게 쓰려면 생성기 표현식과 sum()을 함께 사용할 수 있습니다. 일치하는 문자마다 1을 더하며 중간 리스트를 만들 필요가 없습니다.
text = "hello, world!"
target = "l"
count = sum(character == target for character in text)
print(count)
반복문과 생성기 표현식은 한 글자 대상을 셀 때 str.count()와 똑같이 문자를 비교하며, 대소문자도 구분합니다. 단순한 개수 계산에는 보통 str.count()가 더 읽기 쉽습니다. 주변 로직을 명확하게 보여 주는 경우에는 직접 반복하는 방법을 선택하세요.
정규식으로 문자 개수 세기
대상이 패턴이거나 작업에 이미 정규식 매칭이 포함되어 있다면 표준 라이브러리의 re 모듈을 사용하세요. 정규식에서는 문자가 항상 그대로 해석되는 것은 아닙니다. .이나 * 같은 기호는 특별한 의미를 가집니다. 사용자 입력을 정규식 패턴이 아닌 문자 그대로 일치시켜야 한다면 패턴을 만들기 전에 re.escape()를 적용하세요.
import re
text = "hello, world!"
target = "l"
pattern = re.escape(target)
count = len(re.findall(pattern, text))
print(count)
re.findall()은 일치 항목을 반환하고, len()은 그 개수를 셉니다. 정규식은 단순 문자열 개수 세기보다 유연하지만, 이해해야 할 패턴 문법이 추가됩니다. 일반 문자나 부분 문자열을 세려면 str.count()가 더 간단합니다. 여러 문자로 된 패턴을 매칭할 때는 정규식의 기본 겹치지 않는 매칭 방식이 작업에 맞는지 확인하세요.
상황에 맞는 방법 선택하기
- 문자 하나나 부분 문자열을 그대로 세려면
str.count()를 사용하세요. 간결하고 대소문자를 구분하며, 부분 문자열은 겹치지 않게 셉니다. - 모든 문자의 빈도표를 만들거나 여러 문자의 개수를 조회하려면
collections.Counter를 사용하세요. - 문자를 하나씩 살펴보면서 사용자 지정 처리가 필요하면 반복문이나
sum()생성기를 사용하세요. - 검색 대상이 실제 패턴일 때는
re를 사용하세요. 사용자 입력을 문자 그대로 찾으려면re.escape()로 이스케이프하세요.
문자 하나를 세는 일반적인 경우에는 str.count()부터 사용하면 됩니다. 대안은 전체 문자 통계, 명시적인 문자별 로직, 패턴 매칭처럼 서로 다른 필요를 해결합니다. 문자열 검색 방법을 더 알아보려면 이 Python 튜토리얼을 참고하세요.