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

Python 문자열에서 중복 등장 단어만 골라 치환하는 방법


문자열에서 특정 단어가 여러 번 반복될 때, 가장 처음 등장한 단어는 그대로 유지하고 이후에 중복해서 나타나는 부분만 다른 값으로 바꿔야 하는 경우가 있습니다. 이런 작업은 딕셔너리의 키와 index 메서드, 그리고 리스트 컴프리헨션(list comprehension)을 조합하면 손쉽게 처리할 수 있습니다.

리스트 컴프리헨션은 리스트를 순회하면서 각 요소에 연산을 적용하는 과정을 한 줄로 간결하게 작성할 수 있게 해주는 파이썬 문법입니다. 또한 index 메서드는 특정 값이 리스트(반복 가능한 객체) 안에서 처음 등장하는 위치의 인덱스를 반환합니다. 이 두 가지를 활용하면 "첫 번째 등장인지, 중복 등장인지"를 쉽게 판별할 수 있습니다.

아래는 실제 동작을 보여주는 예제입니다.

예제 코드

my_str = 'Jane is the best . Jane loves to cook. Jane and Will cook together'
print("The string is : ")
print(my_str)
replace_dict = {'Jane' : 'She' }
my_list = my_str.split(' ')
my_result = ' '.join([replace_dict.get(val) if val in replace_dict.keys() and my_list.index(val) != idx else val for idx, val in enumerate(my_list)])
print("The string after replacing with values is : ")
print(my_result)

실행 결과

The string is :
Jane is the best . Jane loves to cook. Jane and Will cook together
The string after replacing with values is :
Jane is the best . She loves to cook. She and Will cook together

코드 설명

  • 먼저 문자열을 정의하고 콘솔에 출력합니다.
  • 치환 규칙을 담은 딕셔너리(replace_dict)를 정의합니다. 여기서는 'Jane'을 'She'로 바꾸도록 설정했습니다.
  • split(' ')으로 문자열을 단어 단위의 리스트로 나눈 뒤, enumerate를 사용해 각 단어와 그 인덱스를 함께 순회합니다.
  • 핵심 조건은 my_list.index(val) != idx입니다. 해당 단어가 처음 등장한 위치와 현재 인덱스가 다르다는 것은 곧 "중복 등장"을 의미하므로, 이 경우에만 딕셔너리의 값으로 치환됩니다. 첫 번째 등장은 원래 단어가 그대로 유지됩니다.
  • 치환이 완료된 단어들은 ' '.join()으로 다시 하나의 문자열로 합쳐진 후 변수에 저장됩니다.
  • 마지막으로 결과 문자열을 콘솔에 출력합니다.

이 방식은 공백을 기준으로 단어 단위 비교를 수행하므로, 정확히 일치하는 단어에만 적용됩니다. 따라서 대소문자가 다르면 별개의 단어로 취급된다는 점에 유의해야 합니다. 필요하다면 비교 전에 문자열을 소문자로 변환하거나 정규표현식을 활용하는 방식으로 확장할 수 있습니다.