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

파이썬(Python) 문자열에서 중복 단어 깔끔하게 제거하는 방법

파이썬에서 문자열에 포함된 중복 단어를 제거하려면, 먼저 문자열을 공백 기준으로 분리해 단어 목록을 만든 뒤, 여러 가지 방법 중 하나로 중복을 걸러내면 됩니다. 이 글에서는 가장 널리 쓰이는 두 가지 방법을 예제 코드와 함께 살펴봅니다.

기본 처리 순서

중복 제거는 일반적으로 다음 단계로 진행됩니다.

  1. 문자열 분리split() 메서드로 문자열을 공백 단위로 나눠 리스트를 만듭니다.
  2. 대소문자 통일 – "John"과 "john"처럼 대소문자만 다른 단어도 같은 단어로 취급되도록 모두 소문자로 변환합니다.
  3. 중복 제거set() 또는 dict.fromkeys()를 이용해 중복을 제거합니다.
  4. 정렬 (선택 사항) – 필요하다면 sorted()로 알파벳 순서로 정렬합니다.

예제 1: set()으로 가장 간단하게 중복 제거하기

sent = "Hi my name is John Doe John Doe is my name"

# 공백 기준으로 단어를 분리하고 모두 소문자로 변환
words = [word.lower() for word in sent.split()]

# set으로 중복을 제거한 뒤 알파벳 순서로 정렬
unique = sorted(set(words))

print(unique)

출력 결과

['doe', 'hi', 'is', 'john', 'my', 'name']

set()은 요소의 순서를 보장하지 않기 때문에, 위 예제처럼 sorted()와 함께 사용하면 항상 정렬된 결과를 얻을 수 있습니다.

예제 2: 원래 등장 순서를 유지하면서 중복 제거하기

단어가 문장에서 처음 등장한 순서를 그대로 유지하고 싶다면 dict.fromkeys()를 활용하는 것이 좋습니다. 파이썬 3.7부터 딕셔너리는 키의 삽입 순서를 유지하기 때문에, 이 성질을 이용해 순서 보존형 중복 제거가 가능합니다.

sent = "Hi my name is John Doe John Doe is my name"

# 등장 순서를 유지한 채 중복 제거
unique = list(dict.fromkeys(word.lower() for word in sent.split()))

print(unique)

출력 결과

['hi', 'my', 'name', 'is', 'john', 'doe']

마무리 정리

파이썬에서 문자열의 중복 단어를 제거하는 핵심은 ① split()으로 단어를 나누고, ② lower()로 대소문자를 통일한 뒤, ③ set()이나 dict.fromkeys()로 중복을 제거하는 것입니다. 정렬된 결과가 필요하면 sorted(set(...))를, 원래 순서를 유지해야 한다면 dict.fromkeys()를 사용하는 것이 가장 깔끔하고 파이썬다운 방법입니다.