두 개의 문자열이 주어졌을 때, 첫 번째 문자열에 포함된 문자 중 두 번째 문자열에도 존재하는 문자의 개수를 구해야 하는 경우가 있습니다. 이 글에서는 Python으로 이 문제를 해결하는 두 가지 대표적인 방법을 예제 코드와 함께 소개합니다.
set() 함수 활용하기
set() 함수는 문자열에서 고유한 문자들만 추출하여 집합을 만들어 줍니다. 여기에 & 연산자(교집합 연산자)를 사용하면 두 문자열에 공통으로 존재하는 문자들을 손쉽게 찾을 수 있습니다. 이 방법은 중복을 제거한 고유 문자 기준으로 개수를 계산합니다.
예제
strA = 'Tutorials Point'
uniq_strA = set(strA)
# 주어진 문자열
print("Given String\n", strA)
strB = 'aeio'
uniq_strB = set(strB)
# 검색할 문자열
print("Search character strings\n", strB)
common_chars = uniq_strA & uniq_strB
print("Count of matching characters are : ", len(common_chars))출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Given String Tutorials Point Search character strings aeio Count of matching characters are : 3
re.search() 활용하기
re 모듈의 search() 함수를 사용하는 방법도 있습니다. 첫 번째 문자열의 각 문자를 하나씩 순회하면서 해당 문자가 두 번째 문자열에 존재하는지 검사하고, 검색 결과가 참일 때마다 카운트 변수를 증가시킵니다. 이 방법은 중복된 문자까지 모두 세기 때문에 set() 방식과 결과가 다를 수 있습니다.
예제
import re
strA = 'Tutorials Point'
# 주어진 문자열
print("Given String\n", strA)
strB = 'aeio'
# 검색할 문자열
print("Search character strings\n", strB)
cnt = 0
for i in strA:
if re.search(i, strB):
cnt = cnt + 1
print("Count of matching characters are : ", cnt)출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Given String Tutorials Point Search character strings aeio Count of matching characters are : 5
두 방법의 차이점
set() 방식은 공통 문자의 종류를 기준으로 개수를 계산합니다. 따라서 'o'나 'i'처럼 여러 번 등장하는 문자도 한 번만 계산되어 결과가 3이 됩니다('a', 'i', 'o'). 반면 re.search() 방식은 첫 번째 문자열에서 일치하는 문자가 등장하는 횟수를 모두 세므로 결과가 5가 됩니다. 고유 문자 수가 필요한지, 전체 등장 횟수가 필요한지에 따라 적절한 방법을 선택하시기 바랍니다.