파이썬
컨테이너 타입
리스트
중복 제거

파이썬 리스트 중복 제거 | 설명과 예제

이번 포스트는 파이썬 리스트 중복 제거 관련 6가지 내용을 알아봅니다. 각각 다음과 같습니다.

  • 리스트 내 중복 모두 제거 함수 정의
  • 이중 리스트 중복 제거
  • 리스트 랜덤 추출 시 중복 제거 방법
  • 중복 제거 시 순서 유지
  • 중복 제거 후 정렬
  • 두 리스트 중복 제거 방법

주제마다 간단한 설명과 함께 예제를 보며 이해해보겠습니다.

1. 리스트 내 중복 모두 제거하는 함수 정의하기

파이썬 리스트 내 모든 중복 요소를 제거하기 위해서는 set() 함수를 활용할 수 있습니다. 파이썬의 기본 데이터 타입인 집합(Set)은 포함한 요소들의 중복을 허용하지 않는다는 특정이 있는데요.

💡

더 자세히 알고 싶다면 리스트 vs 튜플 vs 딕셔너리 vs 집합 포스트를 참고하세요.

set() 함수는 리스트와 같은 이터러블을 집합으로 변환하며, 자동으로 중복된 요소를 제거하는 함수입니다. 이를 이용해 다음과 같이 리스트 내 중복을 모두 제거하는 함수를 작성할 수 있습니다.

예제 코드를 보겠습니다.

def remove_duplicates(lst):
    return list(set(lst))
 
my_list = [1, 2, 3, 3, 4, 2, 1]
result = remove_duplicates(my_list)
 
print(result)
 
# Output
[1, 2, 3, 4]

위 코드에서는 set()을 사용하여 중복을 제거한 후에, list() 함수를 이용해 다시 리스트로 변환하여 반환합니다.

이 경우, 주의해야 할 점은 기존 리스트의 순서가 보장되지 않는다는 점입니다. 파이썬 집합은 순서가 없는 데이터 타입이기 때문에, 다시 리스트로 변환할 때 원래의 순서를 유지하지 않을 가능성이 있습니다.

리스트 중복 제거 시 순서 유지를 원한다면, 섹션 4를 확인해주세요.

2. 이중 리스트 중복 제거

파이썬의 이중 리스트에서 중복을 제거하는 방법은 조금 다르게 처리해야 합니다. 이중 리스트에서 중복을 제거하기 위해서는 set()을 사용할 수 없으므로, 반복문을 활용하여 중복을 제거해야 합니다.

다음은 이중 리스트에서 중복을 제거하는 함수의 예시 코드입니다:

def remove_duplicates_nested(lst):
    result = []
    for sublist in lst:
        if sublist not in result:
            result.append(sublist)
    return result
 
my_list = [[1, 2, 3], [3, 4, 5], [1, 2, 3], [6, 7, 8]]
result = remove_duplicates_nested(my_list)
print(result)
 
# Output
[[1, 2, 3], [3, 4, 5], [6, 7, 8]]

위 코드에서는 빈 리스트 result를 생성하고, 이중 리스트 lst를 반복하면서 각각의 서브리스트가 result에 이미 존재하는지 확인합니다. 만약 result에 존재하지 않는 경우에만 result에 추가합니다.

이에 따라 중복된 하위 리스트가 제거되어, 최종적으로 중복이 제거된 결과를 반환합니다.

3. 리스트 랜덤 추출 시 중복 제거 방법

아래의 과정을 통해, 파이썬 리스트에서 중복을 제거하면서 랜덤하게 요소를 추출할 수 있습니다.

  1. 중복을 제거한 새로운 리스트를 생성합니다.
  2. 생성한 새로운 리스트에서 랜덤하게 요소를 추출합니다.

다음은 이를 구현한 예시 코드입니다:

import random
 
def get_random_elements(lst, num_elements):
    unique_elements = list(set(lst))
    random_elements = random.sample(unique_elements, num_elements)
    return random_elements
 
my_list = [1, 2, 3, 3, 4, 2, 1]
result = get_random_elements(my_list, 3)
print(result)
 
# Output
[1, 4, 2]

위 코드에서는 set()을 사용하여 중복을 제거한 후, list()로 변환하여 새로운 리스트 unique_elements를 생성합니다.

그리고 random.sample() 함수를 사용하여 unique_elements에서 num_elements 개수만큼 랜덤하게 요소를 추출하여 random_elements를 생성합니다. 이후 random_elements를 반환합니다.

💡

random.sample() 함수는 리스트에서 중복되지 않는 요소들을 랜덤하게 추출합니다.

4. 중복 제거 시 순서 유지

set() 함수를 이용한 중복 제거 방법은 리스트의 기존 순서를 무시하는 결과를 냅니다. 이를 방지하고 중복 제거 시 순서 유지하는 방법을 알아볼게요.

파이썬에서 리스트 내 중복을 제거하면서 순서를 유지하기 위해서는 collections 모듈의 OrderedDict 클래스와 list()를 사용할 수 있습니다. 다음은 이를 활용한 코드 예제입니다.

from collections import OrderedDict
 
def remove_duplicates(lst):
    return list(OrderedDict.fromkeys(lst))
 
my_list = [1, 2, 3, 3, 4, 2, 1]
result = remove_duplicates(my_list)
print(result)
 
# Output
[1, 2, 3, 4]

위 코드에서 OrderedDict.fromkeys() 함수를 사용하여 중복을 제거한 순서 유지된 사전을 생성하고, 이를 다시 리스트로 변환합니다.

OrderedDict는 딕셔너리와 유사하지만, 아이템의 순서를 보존하는 딕셔너리형 클래스입니다. 따라서 fromkeys() 메서드를 사용하여 중복을 제거한 사전을 생성하면, 중복을 제거한 후에도 아이템의 순서가 유지됩니다. 이후 list() 함수를 사용하여 딕셔너리를 다시 리스트로 변환합니다.

5. 중복 제거 후 정렬

파이썬에서 리스트 원소 중복을 제거하면서 정렬하는 방법은 다음과 같이 할 수 있습니다:

  1. 중복을 제거한 새로운 리스트를 생성합니다.
  2. 생성한 새로운 리스트를 정렬합니다.

다음은 이를 구현한 예시 코드입니다.

def remove_duplicates_and_sort(lst):
    unique_elements = list(set(lst))
    sorted_elements = sorted(unique_elements)
    return sorted_elements
 
my_list = [3, 2, 1, 4, 3, 2, 1]
result = remove_duplicates_and_sort(my_list)
print(result)
 
# Output
[1, 2, 3, 4]

위 코드에서는 set()을 사용하여 중복을 제거한 후, list로 변환하여 새로운 리스트 unique_elements를 생성합니다.

그리고 sorted() 함수를 사용하여 unique_elements를 오름차순으로 정렬한 sorted_elements를 생성합니다. 이후 sorted_elements를 반환합니다.

💡

sorted() 함수는 리스트를 정렬한 새로운 리스트를 반환합니다. 더 자세한 내용은 리스트 정렬 포스트를 참고하세요.

6. 두 리스트 중복 제거 방법

두 리스트의 중복을 제거하는 방법은 리스트 합치기 포스트의 섹션 4의 내용으로 다루고 있습니다.

해당 섹션을 확인해주세요.

마치며

이번 포스트에서는 파이썬 리스트에서 중복 제거와 관련한 여러 가지 궁금한 점을 해결해보았습니다.

실제 작업 시에 도움이 되길 바라겠습니다.

copyright for 파이썬 리스트 중복 제거 | 설명과 예제

© 2023 All rights reserved.