파이썬에서리스트를 중복 제거하는 방법

Aliaksei Yursha 2023년1월30일
  1. 순서를 유지하지 않고 파이썬리스트 중복 제거
  2. 순서를 유지하면서 파이썬리스트 중복 제거
파이썬에서리스트를 중복 제거하는 방법

때로는 파이썬에서는 값 목록이 있는데 그중 일부는 중복입니다.
목록에서 모든 중복 항목을 제거하는 일상적인 사용 사례이므로
목록의 나머지 모든 값은 고유합니다.

우리는 다른 방법을 사용하여 이것을 달성 할 수 있습니다.
요소의 원래 순서, 다른 요소는 그렇지 않습니다.

순서를 유지하지 않고 파이썬리스트 중복 제거

원래 주문을 보존 할 필요가없는 경우,
내장 된 set데이터 구조를 사용하여 목록을 중복 제거 할 수 있습니다.
set 은 설계 상 고유 한 요소 만 포함 할 수있는 데이터 구조입니다.

초기 목록에서 이러한 ‘세트’를 구성함으로써 모든 중복 요소
무시됩니다.
그런 다음 세트를 다시 목록으로 변환하고 고유 한 요소 목록을 얻습니다.

불행히도 중복 제거 이후 요소의 순서가 변경됩니다.
set 데이터 구조의 기능은 해시 테이블을 사용하여 구현됩니다.
어느 요소가 먼저 삽입되었는지 기억하지 마십시오.

>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> unique_set = set(names)
>>> unique_list = list(unique_set)
>>> unique_list
['Stacy', 'Sarah', 'Jim', 'Bob']

Python 의 과학 컴퓨팅에 NumPy 패키지를 사용하는 경우,
numpy.unique()함수를 사용할 수도 있습니다.

>>> import numpy
>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim'] 
>>> numpy.unique(names).tolist()
['Bob', 'Jim', 'Sarah', 'Stacy']

위의 방법은 원래 요소 순서를 유지하지 않습니다.
순서를 유지하는 NumPy 방식이 더 복잡하며 아래에서 찾을 수 있습니다.

순서를 유지하면서 파이썬리스트 중복 제거

초기 순서를 유지하는 간단한 솔루션은 이중 for-each 루프를 사용하는 것입니다.

첫 번째 루프는 원래 목록의 모든 요소를 ​​순회합니다.
두 번째 루프는 동일한 값을 가진 요소를 이미 보았는지 확인합니다.

그렇지 않은 경우 ‘고유 한’목록에 추가합니다.
원래 순서대로 고유 한 요소를 포함합니다.

>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> unique = []
>>> for name in names:         # 1st loop
...   if name not in unique:   # 2nd loop
...     unique.append(name)
...
>>> unique
['Bob', 'Stacy', 'Sarah', 'Jim']

원래 순서를 유지하면서 목록을 중복 제거하는 또 다른 방법은
collections.OrderedDict 데이터 구조.
OrderedDict 는 파이썬에서 특별한 종류의 사전 데이터 구조입니다.
키 삽입 순서를 기억합니다.

>>> from collections import OrderedDict
>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> unique = list(OrderedDict.fromkeys(names))
>>> unique
['Bob', 'Stacy', 'Sarah', 'Jim']

Pandas Python 데이터 분석 라이브러리를 사용하는 경우
pandas.unique 도 도움이 될 수 있습니다. 이 방법은 주문 보존입니다.

>>> import pandas
>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> pandas.unique(names).tolist()
['Bob', 'Stacy', 'Sarah', 'Jim']

NumPy 의 순서를 유지하면서 목록을 중복 제거하는 방법은 조금 더 복잡합니다.
각 개별 요소의 색인을 기억 한 다음 고유 목록을 다시 작성해야합니다.
이러한 색인을 사용하여 원래의 색인에서

>>> import numpy
>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> _, indexes = numpy.unique(names, return_index=True)
>>> unique = [names[i] for i in numpy.sort(indexes)]
>>> unique
['Bob', 'Stacy', 'Sarah', 'Jim']

관련 문장 - Python List