문장이 주어졌을 때 그 안에서 중복된 단어를 모두 제거하는 프로그램을 파이썬으로 작성하는 방법을 알아보겠습니다.
예제
입력: I am a peaceful soul and blissful soul. 출력: I am a peaceful soul and blissful.
알고리즘
- 1단계: 입력 문장을 공백을 기준으로 분리해 단어 리스트를 만듭니다.
- 2단계: 리스트에 담긴 각 문자열을 하나의 문자열로 결합합니다.
- 3단계:
Counter메서드로 딕셔너리를 생성합니다. 이때 단어는 키(key), 등장 빈도는 값(value)이 됩니다. - 4단계: 고유한 단어들만 다시 결합해 하나의 문자열로 만듭니다.
예제 코드
from collections import Counter
def remov_duplicates(st):
st = st.split(" ")
for i in range(len(st)):
st[i] = "".join(st[i])
dupli = Counter(st)
s = " ".join(dupli.keys())
print("중복 제거 후 문장 ::>", s)
# 드라이버 프로그램
if __name__ == "__main__":
st = input("문장을 입력하세요: ")
remov_duplicates(st)동작 원리
split()으로 문장을 단어 단위로 나눈 뒤, collections.Counter에 전달하면 각 단어의 등장 횟수가 자동으로 계산됩니다. Counter는 딕셔너리 구조이기 때문에 동일한 단어는 하나의 키로만 존재하며, keys()를 공백으로 join()하면 중복이 제거된 문장을 얻을 수 있습니다. 또한 파이썬 3.7 이상에서는 딕셔너리가 삽입 순서를 유지하므로, 단어들이 처음 등장한 순서대로 출력됩니다.
실행 결과
문장을 입력하세요: i am a peaceful soul and blissful soul 중복 제거 후 문장 ::> i am a peaceful soul and blissful