리스트의 요소 중 일부는 다른 변수에 담긴 특정 문자열과 일치하거나 그 문자열을 포함하고 있을 수 있습니다. 이 글에서는 파이썬에서 주어진 리스트 안에 특정 문자열이 몇 번 등장하는지 세는 다양한 방법을 소개합니다.
1. range와 len 함수 활용하기
가장 기본적인 방법은 range()와 len() 함수를 조합해 리스트의 각 요소를 순회하는 것입니다. 반복문 안에서 in 연산자로 해당 문자열이 요소에 포함되어 있는지 확인하고, 조건이 참일 때마다 미리 0으로 초기화해 둔 카운트 변수를 1씩 증가시킵니다.
예제 코드
Alist = ['Mon', 'Wed', 'Mon', 'Tue', 'Thu']
Bstring = 'Mon'
# 주어진 리스트 출력
print("주어진 리스트:\n", Alist)
print("확인할 문자열:\n", Bstring)
count = 0
for i in range(len(Alist)):
if Bstring in Alist[i]:
count += 1
print("문자열이 리스트에 포함된 횟수:\n", count)실행 결과
위 코드를 실행하면 아래와 같은 결과를 얻을 수 있습니다.
주어진 리스트: ['Mon', 'Wed', 'Mon', 'Tue', 'Thu'] 확인할 문자열: Mon 문자열이 리스트에 포함된 횟수: 2
2. sum 함수로 한 줄로 처리하기
더 파이썬다운 방법은 제너레이터 표현식과 sum() 함수를 함께 사용하는 것입니다. in 연산자의 결과는 True(1) 또는 False(0)이므로, 이를 모두 더하면 조건을 만족하는 요소의 개수가 자동으로 계산됩니다. 별도의 카운트 변수나 반복문 없이 한 줄로 깔끔하게 해결할 수 있습니다.
예제 코드
Alist = ['Mon', 'Wed', 'Mon', 'Tue', 'Thu']
Bstring = 'Mon'
# 주어진 리스트 출력
print("주어진 리스트:\n", Alist)
print("확인할 문자열:\n", Bstring)
count = sum(Bstring in item for item in Alist)
print("문자열이 리스트에 포함된 횟수:\n", count)실행 결과
위 코드를 실행하면 첫 번째 방법과 동일한 결과가 출력됩니다.
주어진 리스트: ['Mon', 'Wed', 'Mon', 'Tue', 'Thu'] 확인할 문자열: Mon 문자열이 리스트에 포함된 횟수: 2
3. Counter와 chain 조합으로 문자 단위까지 세기
itertools 모듈의 chain과 collections 모듈의 Counter를 사용하면 좀 더 유연한 집계가 가능합니다. 이 방법은 리스트 전체를 하나의 시퀀스로 연결한 뒤 각 값의 등장 횟수를 딕셔너리 형태로 집계해 주기 때문에, 부분 문자열 단위의 매칭에도 활용할 수 있습니다.
예제 코드
from itertools import chain
from collections import Counter
Alist = ['Mon', 'Wed', 'Mon', 'Tue', 'Thu']
Bstring = 'M'
# 주어진 리스트 출력
print("주어진 리스트:\n", Alist)
print("확인할 문자열:\n", Bstring)
cnt = Counter(chain.from_iterable(set(i) for i in Alist))['M']
print("문자열이 리스트에 포함된 횟수:\n", cnt)실행 결과
위 코드를 실행하면 아래와 같은 결과를 얻을 수 있습니다.
주어진 리스트: ['Mon', 'Wed', 'Mon', 'Tue', 'Thu'] 확인할 문자열: M 문자열이 리스트에 포함된 횟수: 2
정리 및 추가 팁
세 가지 방법을 비교해 보면 상황에 따라 선택 기준이 달라집니다.
- range + len + 반복문: 초보자에게 직관적이며, 인덱스가 필요한 경우에 유용합니다.
- sum + 제너레이터: 가장 간결하고 파이썬다운 방식으로, 대부분의 경우 권장됩니다.
- Counter + chain: 여러 값의 빈도를 한 번에 집계해야 할 때 특히 강력합니다.
참고로, 리스트 요소가 문자열과 완전히 동일한지만 확인하려면 Alist.count(Bstring) 메서드를 사용하는 것이 가장 간단합니다. 위에서 소개한 in 연산자 기반 방법은 요소가 문자열을 포함만 하면 되는 경우(부분 매칭)에 적합하다는 점을 기억해 두세요.