파이썬에서 리스트에 중복된 요소를 삭제하고 싶은 경우를 알아보겠습니다.
리스트에 중복된 값을 제거하는 방법으로 set 함수를 많이 사용하는 경우도 있습니다.
하지만 set 함수로 중복 제거가 안되는 경우도 있습니다.
set 함수를 사용해 중복하는 방법과 set을 사용하지 않고 리스트 중복 값을 제거하는 방법을 보겠습니다.
set 중복 제거
#list를 set으로 변환해 중복값 삭제 숫자 타입
set([1,1,2,2,3,3,4,5])
#{1, 2, 3, 4, 5}
#list를 set을 변환해 중복값 삭제 문자열 타입
set(['a', 'a', 'b', 'b', 'c'])
#{'b', 'c', 'a'}
#숫자와 문자열 혼합 타입
set([1, 1, 'x', 'x'])
#{1, 'x'}
set은 중복 요소를 허용하지 않기 때문에 중복 값이 삭제됩니다.
set 변환 안되는 경우
2차원 리스트를 set으로 변환해 중복 값을 제거하려고 하면 에러가 발생하는 경우가 있습니다.
set([[9, 9], [], [], [9, 9]])
Traceback (most recent call last):
File "", line 1, in
TypeError: unhashable type: 'list'
이러한 경우에는 list 안에 있는 list를 tuple로 변환하고 set으로 다시 변환해 중복 값을 제거할 수 있습니다.
#list를 tuple로 변환
list(map(tuple,[[9, 9], [], [], [9, 9]]))
#[(9, 9), (), (), (9, 9)]
#tuple을 set으로 변환해 중복값을 제거
set(list(map(tuple,[[9, 9], [], [], [9, 9]])))
#{(), (9, 9)}
set에서 list로 다시 변환
set을 사용해 중복 값을 제거하고 다시 리스트 형태로 변환해 줘야 합니다.
list() 함수에 중복 값을 제거한 set을 대입시켜주면 list로 변환이 됩니다.
#list를 set으로 변환해 중복값 삭제후 list로 변환
list(set([1,1,2,2,3,3,4,5]))
#{1, 2, 3, 4, 5}
마지막으로 리스트 변수를 사용한 예제를 보고 리스트 중복 제거 방법을 마치겠습니다.
l = [3, 3, 2, 1, 5, 1, 4, 2, 3]
print(set(l))
# {1, 2, 3, 4, 5}
print(list(set(l)))
# [1, 2, 3, 4, 5]
중복 값을 제거하고 싶은 리스트 변수를 list(set(변수)) 형태로 작성해 주면 간단히 중복 값을 제거할 수 있습니다.
댓글