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

두 문자열에서 공통 단어를 제거하는 파이썬 프로그램

두 문자열을 비교했을 때 양쪽 모두에 나타나는 공통 단어를 제거하고, 한쪽에만 존재하는 고유한 단어만 남기고 싶은 경우가 종종 있습니다. 이럴 때 별도의 함수를 정의해 두 문자열을 매개변수로 받은 뒤, 문자열을 공백 기준으로 분리(split)하고 리스트 컴프리헨션(list comprehension)으로 결과를 필터링하면 간단하게 해결할 수 있습니다.

예제 코드

아래는 두 문자열에서 공통 단어를 제거하는 전체 예제입니다.

def common_words_filter(my_string_1, my_string_2):

   my_word_count = {}

   for word in my_string_1.split():
      my_word_count[word] = my_word_count.get(word, 0) + 1

   for word in my_string_2.split():
      my_word_count[word] = my_word_count.get(word, 0) + 1

   return [word for word in my_word_count if my_word_count[word] == 1]

my_string_1 = "Python is fun"
print("첫 번째 문자열은 :")
print(my_string_1)

my_string_2 = "Python is fun to learn"
print("두 번째 문자열은 :")
print(my_string_2)

print("공통 단어를 제거한 결과는 :")
print(common_words_filter(my_string_1, my_string_2))

실행 결과

첫 번째 문자열은 :
Python is fun
두 번째 문자열은 :
Python is fun to learn
공통 단어를 제거한 결과는 :
['to', 'learn']

코드 설명

  • 'common_words_filter'라는 이름의 함수를 정의하고, 두 개의 문자열을 매개변수로 전달받습니다.

  • 함수 내부에는 단어별 등장 횟수를 저장할 빈 딕셔너리(my_word_count)를 생성합니다.

  • split() 메서드로 첫 번째 문자열을 공백 기준으로 나눈 뒤, 각 단어를 순회하며 등장 횟수를 카운트합니다.

  • 딕셔너리의 get() 메서드를 사용하면 해당 단어가 아직 없을 때 기본값 0을 반환하므로, KeyError 없이 안전하게 카운트를 증가시킬 수 있습니다.

  • 두 번째 문자열에 대해서도 동일한 과정을 반복해 같은 딕셔너리에 누적합니다.

  • 마지막으로 리스트 컴프리헨션을 이용해 딕셔너리를 순회하면서, 등장 횟수가 정확히 1번인 단어(즉, 두 문자열에서 공통되지 않은 단어)만 골라 새 리스트로 반환합니다.

  • 함수 외부에서는 두 개의 문자열을 정의하고 콘솔에 출력합니다.

  • 필요한 인자를 넘겨 함수를 호출한 뒤, 그 결과를 콘솔에 출력합니다.

참고 사항

이 방식은 시간 복잡도가 O(n + m)(n, m은 각 문자열의 단어 수)로 효율적이며, 파이썬의 collections.Counter를 활용하면 카운팅 로직을 더욱 간결하게 작성할 수도 있습니다. 또한 대소문자를 구분하지 않으려면 split() 전에 lower()를 적용해 단어를 정규화하는 것이 좋습니다.