Python List 배열 중복 제거 방법 (기존 리스트 순서 유지 방법, 순서 유지 하지 않는 방법)
Python에서 리스트 내에 존재하는 중복을 제거하는 방법을 알려드리도록 하겠습니다.
방법은 크게 2가지로 나눠집니다.
- 기존 리스트의 순서를 고려하지 않고 중복을 제거하는 방법
- set() 사용
- 기존 리스트의 순서를 유지하고 중복을 제거하는 방법
- for 문 사용
- dict.fromkeys() 사용
- functools.reduce() 사용
그럼 하나씩 알려드리도록 하겠습니다.
- 기존 리스트의 순서를 고려하지 않고 중복을 제거하는 방법
1. set() 사용
array = ["F", "D", "A", "C", "A", "C", "F", "B", "C", "E", "D", "C", "F", "A", "B", "E", "F", "E"]
result = list(set(array))
print("중복 제거 전 : ", array)
print("중복 제거 후 : ", result)
# Output
# 중복 제거 전 : ['F', 'D', 'A', 'C', 'A', 'C', 'F', 'B', 'C', 'E', 'D', 'C', 'F', 'A', 'B', 'E', 'F', 'E']
# 중복 제거 후 : ['C', 'E', 'D', 'B', 'A', 'F']
Python의 집합 자료형 set 을 사용하여 중복을 제거할 수 있습니다.
집합자료형 set은 중복을 허용하지 않고, 순서가 없으므로
기존 리스트의 순서를 고려하지 않아도 되는 상황에서 중복을 제거할 때 쉽게 사용할 수 있습니다.
- 기존 리스트의 순서를 유지하고 중복을 제거하는 방법
1. for 문 사용
array = ["F", "D", "A", "C", "A", "C", "F", "B", "C", "E", "D", "C", "F", "A", "B", "E", "F", "E"]
result = []
for value in array:
if value not in result:
result.append(value)
print("중복 제거 전 : ", array)
print("중복 제거 후 : ", result)
# Output
# 중복 제거 전 : ['F', 'D', 'A', 'C', 'A', 'C', 'F', 'B', 'C', 'E', 'D', 'C', 'F', 'A', 'B', 'E', 'F', 'E']
# 중복 제거 후 : ['F', 'D', 'A', 'C', 'B', 'E']
결과값을 담을 새로운 리스트를 하나 만들어둔 뒤,
기존의 리스트를 for 문을 돌면서,
현재의 값이 새로운 리스트에 존재하지 않을때만 새로운 리스트에 값을 삽입하는 방식으로 중복을 제거합니다.
Index 순서대로 for 문을 돌기때문에 순서를 유지하면서 중복을 제거합니다.
2. dict.fromkeys() 사용
array = ["F", "D", "A", "C", "A", "C", "F", "B", "C", "E", "D", "C", "F", "A", "B", "E", "F", "E"]
result = list(dict.fromkeys(array))
print("중복 제거 전 : ", array)
print("중복 제거 후 : ", result)
# Output
# 중복 제거 전 : ['F', 'D', 'A', 'C', 'A', 'C', 'F', 'B', 'C', 'E', 'D', 'C', 'F', 'A', 'B', 'E', 'F', 'E']
# 중복 제거 후 : ['F', 'D', 'A', 'C', 'B', 'E']
dict.fromkeys() 를 사용하여 기존 리스트의 순서를 유지하고 중복을 제거할 수 있습니다.
※ Python 3.7 버전부터 dictionary 가 삽입 순서를 보존하기 때문에 순서를 유지할 수 있습니다.
3. functools.reduce() 사용
from functools import reduce
array = ["F", "D", "A", "C", "A", "C", "F", "B", "C", "E", "D", "C", "F", "A", "B", "E", "F", "E"]
result = reduce(lambda acc, cur: acc if cur in acc else acc+[cur], array, [])
print("중복 제거 전 : ", array)
print("중복 제거 후 : ", result)
# Output
# 중복 제거 전 : ['F', 'D', 'A', 'C', 'A', 'C', 'F', 'B', 'C', 'E', 'D', 'C', 'F', 'A', 'B', 'E', 'F', 'E']
# 중복 제거 후 : ['F', 'D', 'A', 'C', 'B', 'E']
functools.reduce() 를 사용하여 기존 리스트의 순서를 유지하고 중복을 제거할 수 있습니다.
방식은 for 문과 같다고 생각하시면 됩니다.
결과값을 담을 새로운 리스트 하나를 만들고,
기존의 리스트를 for 문을 돌면서,
현재의 값이 새로운 리스트에 존재하지 않을때만 새로운 리스트에 값을 삽입하는 방식으로 중복을 제거합니다.
reduce()는 정말 여러모로 쓸모가 많아서 제가 정말 좋아하고 자주쓰는 함수입니다.
JavaScript에서도 reduce를 정말 여러곳에서 사용합니다.
또 많은 다른 방식도 많이 있겠지만 더 좋은 추가적인 내용이 있다면 다음에 또 추가하도록 하겠습니다!
이상으로 Python 리스트 내에 존재하는 중복을 제거하는 방법에 대한 설명을 마치도록 하겠습니다.
관련 정보
도움이 되셨다면 공감, 댓글 부탁드립니다!
궁금하신 점이나 요청사항은 언제든지 말씀해주세요!
피드백도 언제나 환영입니다!
감사합니다.
'Developer > Python' 카테고리의 다른 글
Python 날짜, 시간을 문자열로 변환하는 방법 (date to string, time to string) - strftime (0) | 2021.12.29 |
---|---|
Python 현재 날짜, 현재 시간 구하는 2가지 방법 (datetime, time) (0) | 2021.12.28 |
Python 문자열 중복되는 공백 하나의 공백으로 만드는 방법, 제거 방법 2가지 (0) | 2021.12.25 |
Python 공백 제거 하는 방법 3가지 (모든 공백, 왼쪽 공백, 오른쪽 공백, 양쪽 공백, 원하는 공백 제거) (0) | 2021.12.24 |
Python Dictionary for 문에서 Key, Value 사용하는 방법 (Dictionary For loop) (0) | 2021.12.22 |
댓글