본문 바로가기
Developer/Python

Python List 배열 중복 제거 방법 (순서 유지 방법, 순서 유지 하지 않는 방법)

by 김씩씩 2021. 12. 27.

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 리스트 내에 존재하는 중복을 제거하는 방법에 대한 설명을 마치도록 하겠습니다.

 


관련 정보

 

Python List 배열 요소 중복 횟수 구하는 방법 (count duplicates in list)

Python List 배열 요소 중복 횟수 구하는 방법 (count duplicates in list) Python 에서 배열안에 요소들의 중복되는 횟수를 구하는 방법을 알려드리도록 하겠습니다. 목차 - List 안에 모든 요소들의..

jsikim1.tistory.com


 

도움이 되셨다면 공감, 댓글 부탁드립니다!

궁금하신 점이나 요청사항은 언제든지 말씀해주세요!

피드백도 언제나 환영입니다!

 

감사합니다.


댓글