두 문자열에서 공통으로 사용되는 문자를 비교하거나 카운터와 딕셔너리의 교차(교집합) 연산을 시연해야 할 때, 파이썬의 collections 모듈에 포함된 Counter 클래스를 활용할 수 있습니다.
Counter 객체에 &(AND) 연산자를 적용하면 두 객체에 공통으로 존재하는 요소들을 더 낮은 빈도수를 기준으로 묶은 새로운 Counter가 만들어집니다. 이 성질을 이용하면 첫 번째 문자열의 모든 문자가 두 번째 문자열 안에 충분히 들어 있는지, 즉 한 문자열을 다른 문자열의 문자들로 재구성할 수 있는지 간단하게 확인할 수 있습니다.
예제
from collections import Counter
def make_string(str_1,str_2):
dict_one = Counter(str_1)
dict_two = Counter(str_2)
result = dict_one & dict_two
return result == dict_one
string_1 = 'Hi Mark'
string_2 = 'how are yoU'
print("The first string is :")
print(string_1)
print("The second string is :")
print(string_2)
if (make_string(string_1,string_2)==True):
print("It is possible")
else:
print("It is not possible")출력
The first string is : Hi Mark The second string is : how are yoU It is not possible
설명
필요한 패키지인
collections모듈의Counter를 임포트합니다.두 개의 문자열을 매개변수로 받아 각각
Counter객체로 변환하는 함수make_string을 정의합니다.변환된 결과는 각각
dict_one과dict_two라는 변수에 할당되어 딕셔너리처럼 다뤄집니다.&연산자로 두 Counter의 교차(교집합)를 구한 뒤, 그 결과가dict_one과 완전히 같은지 비교하여 반환합니다. 이는 곧 첫 번째 문자열의 모든 문자가 두 번째 문자열에 같은 횟수 이상으로 포함되어 있는지를 검사하는 것과 같습니다.함수 외부에서 두 문자열을 정의한 후, 이들을 인자로 전달하며 함수를 호출합니다.
함수가
True를 반환하면 "It is possible",False를 반환하면 "It is not possible"이라는 문구가 콘솔에 출력됩니다.
위 예제에서는 문자 비교 시 대소문자가 구분되기 때문에, 첫 번째 문자열에 있는 'H', 'M', 'k' 등의 문자가 두 번째 문자열에는 존재하지 않습니다. 따라서 최종적으로 "It is not possible"이 출력됩니다.