set
을 사용하여 중복 제거하기
set
은 파이썬의 내장 자료구조로, 중복된 값을 허용하지 않는 특징이 있습니다. 이 특징을 이용하여 리스트의 중복을 제거할 수 있습니다. set
으로 변환하면 중복된 값들이 자동으로 제거되며, 이후 다시 list
로 변환하여 원하는 결과를 얻을 수 있습니다.
def remove_duplicates_with_set(input_list):
return list(set(input_list))
my_list = [1, 2, 2, 3, 4, 4, 5]
no_duplicates = remove_duplicates_with_set(my_list)
print(no_duplicates)
이 방법의 단점은 원래 리스트의 순서가 유지되지 않을 수 있다는 것입니다. set
은 순서를 고려하지 않기 때문에, 변환 과정에서 원래 순서가 뒤섞일 수 있습니다.
리스트 컴프리헨션과 in
연산자를 사용하여 중복 제거하기
리스트 컴프리헨션은 리스트를 생성하는 간결하고 효율적인 방법입니다. 이를 이용하여, 원래 리스트의 순서를 유지하면서 중복을 제거할 수 있습니다. 새로운 리스트에 값이 없는 경우에만 추가하는 방식으로 중복을 제거할 수 있습니다.
def remove_duplicates_with_list_comprehension(input_list):
no_duplicates = []
[no_duplicates.append(x) for x in input_list if x not in no_duplicates]
return no_duplicates
my_list = [1, 2, 2, 3, 4, 4, 5]
no_duplicates = remove_duplicates_with_list_comprehension(my_list)
print(no_duplicates)
이 방법은 원래 리스트의 순서를 유지하면서 중복을 제거할 수 있지만, 리스트의 크기가 큰 경우에는 상대적으로 느릴 수 있습니다. 리스트에 요소가 이미 있는지 확인하기 위해 in
연산자를 사용하면 선형 시간이 소요되기 때문입니다.
OrderedDict
를 사용하여 중복 제거하기
OrderedDict
는 파이썬의 collections
모듈에서 제공하는 자료구조로, 순서가 있는 딕셔너리입니다. 이를 이용하면, 중복을 제거하면서 원래 리스트의 순서를 유지할 수 있습니다.
from collections import OrderedDict
def remove_duplicates_with_ordered_dict(input_list):
return list(OrderedDict.fromkeys(input_list))
my_list = [1, 2, 2, 3, 4, 4, 5]
no_duplicates = remove_duplicates_with_ordered_dict(my_list)
print(no_duplicates)
OrderedDict.fromkeys()
함수는 입력 리스트의 요소를 키로 사용하여 OrderedDict
를 생성합니다. 중복된 키는 하나만 유지되며, 이 과정에서 중복이 제거됩니다. 추가적으로, OrderedDict
는 요소의 삽입 순서를 유지하므로 원래 리스트의 순서도 보존됩니다. 이후 list()
함수를 사용하여 OrderedDict
를 일반 리스트로 변환하면 원하는 결과를 얻을 수 있습니다.
이 방법은 중복을 제거하면서 원래 리스트의 순서를 유지할 수 있으며, 큰 리스트에서도 상대적으로 빠른 성능을 제공합니다.
정리
세 가지 방법 중 하나를 선택하여 리스트 내의 중복을 제거할 수 있습니다. 상황에 따라 가장 적합한 방법을 선택하면 됩니다.
set
을 사용하는 방법은 가장 간단하지만, 원래 리스트의 순서를 유지하지 못할 수 있습니다.- 리스트 컴프리헨션과
in
연산자를 사용하는 방법은 원래 순서를 유지하면서 중복을 제거할 수 있지만, 큰 리스트에서는 상대적으로 느릴 수 있습니다. OrderedDict
를 사용하는 방법은 원래 순서를 유지하면서 중복을 제거할 수 있고, 큰 리스트에서도 빠른 성능을 제공합니다. 따라서 원래 리스트의 순서가 중요한지, 성능이 중요한지 등 여러 요소를 고려하여 가장 적절한 방법을 선택하면 됩니다.