파이썬에서 리스트 내 원소들의 중복 제거하기

@ckdhkdwns · April 21, 2023 · 5 min read

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를 일반 리스트로 변환하면 원하는 결과를 얻을 수 있습니다.

이 방법은 중복을 제거하면서 원래 리스트의 순서를 유지할 수 있으며, 큰 리스트에서도 상대적으로 빠른 성능을 제공합니다.

정리

세 가지 방법 중 하나를 선택하여 리스트 내의 중복을 제거할 수 있습니다. 상황에 따라 가장 적합한 방법을 선택하면 됩니다.

  1. set을 사용하는 방법은 가장 간단하지만, 원래 리스트의 순서를 유지하지 못할 수 있습니다.
  2. 리스트 컴프리헨션과 in 연산자를 사용하는 방법은 원래 순서를 유지하면서 중복을 제거할 수 있지만, 큰 리스트에서는 상대적으로 느릴 수 있습니다.
  3. OrderedDict를 사용하는 방법은 원래 순서를 유지하면서 중복을 제거할 수 있고, 큰 리스트에서도 빠른 성능을 제공합니다. 따라서 원래 리스트의 순서가 중요한지, 성능이 중요한지 등 여러 요소를 고려하여 가장 적절한 방법을 선택하면 됩니다.
@ckdhkdwns
developer blog