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

파이썬 Counter와 딕셔너리 교차(교집합) 활용 예제

두 문자열에서 공통으로 사용되는 문자를 비교하거나 카운터와 딕셔너리의 교차(교집합) 연산을 시연해야 할 때, 파이썬의 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_onedict_two라는 변수에 할당되어 딕셔너리처럼 다뤄집니다.

  • & 연산자로 두 Counter의 교차(교집합)를 구한 뒤, 그 결과가 dict_one과 완전히 같은지 비교하여 반환합니다. 이는 곧 첫 번째 문자열의 모든 문자가 두 번째 문자열에 같은 횟수 이상으로 포함되어 있는지를 검사하는 것과 같습니다.

  • 함수 외부에서 두 문자열을 정의한 후, 이들을 인자로 전달하며 함수를 호출합니다.

  • 함수가 True를 반환하면 "It is possible", False를 반환하면 "It is not possible"이라는 문구가 콘솔에 출력됩니다.

위 예제에서는 문자 비교 시 대소문자가 구분되기 때문에, 첫 번째 문자열에 있는 'H', 'M', 'k' 등의 문자가 두 번째 문자열에는 존재하지 않습니다. 따라서 최종적으로 "It is not possible"이 출력됩니다.