Python에서 리스트의 중복을 제거하는 경우, 크게 두 가지 경우를 생각해볼 수 있다.
• 리스트의 중복만을 제거하는 경우 ( 기존 리스트의 순서는 고려 x)
• 리스트의 중복을 제거하되 기존 리스트의 순서는 유지
문제의 예시로써, 아래와 같이 중복이 있는 데이터가 존재한다고 가정하자.
>>> dup_list = ['1','3','6','5','5','3','4','4','3','2','2','2','1']
1. 리스트의 중복만을 제거하는 경우
기존 리스트의 순서는 고려하지 않고 중복만을 제거하는 경우에는 Python의 set 자료형을 이용하면 된다.
※ Python의 set 자료형의 특징은 아래와 같다.
1) 중복을 허용하지 않음 (Removing Duplicated)
2) Set 내부에 있는 값들은 순서가 존재하지 않음 (Unordered)
※ Set 자료형에 대한 documentary: https://docs.python.org/2/library/sets.html
- Set 자료형을 이용하는 경우
>>> list(set(dup_list))
['4', '2', '5', '1', '6', '3']
2. 리스트의 중복을 제거하되 기존 리스트의 순서를 유지하는 경우
리스트의 중복을 제거하되 기존 리스트의 순서를 유지하는 방법에는 여러가지 방법들이 존재한다. 그 중 대표적인 4가지 방법을 설명하고자 한다. 해당 방법들에 대한 자세한 설명은 다음 레퍼런스를 참고하기 바란다 [5].
1) Python의 Dictionary를 이용하는 방법
Python 3.7 이상의 버전부터 dictionary는 "key"값을 넣는 순서를 기억한다. 따라서, dict을 이용해서 가장 간단한 방법으로 리스트의 중복을 제거하면서 기존 리스트의 순서를 유지할 수 있다. [6,7]
>>> list(dict.fromkeys(dup_list))
['1', '3', '6', '5', '4', '2']
2) Sorted() 함수를 이용하는 방법
주어진 리스트를 Sorted 함수로 정렬하되 정렬 순서 (또는 키)는 원소의 인덱스로 사용한다.
>>> sorted(set(dup_list), key = lambda x: dup_list.index(x))
['1', '3', '6', '5', '4', '2']
3) Collection package의 OrderedDict을 이용하는 방법
- OrderedDict과 list comprehension를 통한 접근 방법을 비교하는 경우, OrderedDict의 속도가 훨씬 더 빠르다.
- python 3.5에서는 OrderedDict을 이용한 접근방법이 가장 빠르다는데 확인이 필요할 것 같다.
>>> from collections import OrderedDict
>>> list(OrderedDict.fromkeys(dup_list))
['1', '3', '6', '5', '4', '2']
4) For 구문을 이용하는 방법
for 구문을 이용하여 기존 리스트에서 중복을 제거한 새로운 리스트를 만든다.
>>> newlist = []
>>> for x in dup_list:
... if x not in newlist:
... newlist.append(x)
>>> print(newlist)
['1', '3', '6', '5', '4', '2']
Reference
[1] https://bluese05.tistory.com/13
[2] https://yangyang1201.tistory.com/126
[3] https://zereight.tistory.com/209
[4] https://www.delftstack.com/ko/howto/python/how-to-deduplicate-a-list-in-python/
[5] https://stackoverflow.com/questions/480214/how-do-you-remove-duplicates-from-a-list-whilst-preserving-order/39835527#39835527
[6] https://mail.python.org/pipermail/python-dev/2017-December/151283.html
[7] https://stackoverflow.com/questions/39980323/are-dictionaries-ordered-in-python-3-6
'프로그래밍 언어 > Python 3' 카테고리의 다른 글
[Python] 리스트 내에 element가 있는지 확인 (0) | 2021.03.22 |
---|---|
[Python] set 자료형 정리 (0) | 2021.01.01 |
[Python 3] dictionary list sorting (0) | 2020.12.20 |
[Python] Dictionary sorting by key or value (0) | 2020.12.19 |
[Jupyter] Jupyter lab install (0) | 2020.07.09 |
댓글