List에서 element를 distinct 처리하기 위해서 set()을 쓰곤 한다.
하지만 List를 element로 갖는 2차원 List에서 distinct 처리를 하기 위해 set()을 사용하는 경우 아래와 같이 TypeError가 난다.
data = [
[1, 1], # duplicated
[2, 2], # unique
[1, 1], # duplicated
]
set(data)
# Exception has occurred: TypeError
# unhashable type: 'list'
List는 mutable 이기 때문에 hash를 지원하지 않기 때문에 List element를 tuple로 변환한 뒤 set()을 사용해야 한다.
(참고: In Python, why is a tuple hashable but not a list?)
data = [
[1, 1],
[2, 2],
[1, 1],
]
# element tuple 변환
tupled_data = [tuple(d) for d in data] # [(1, 1), (2, 2), (1, 1)]
# set() 적용
distinct_data = set(tupled_data) # {(1, 1), (2, 2)}
distinct된 결과를 원래 2차원 List로 타입 변환이 필요한 경우 아래와 같이 Tuple을 List로 바꿔준다.
data = [
[1, 1],
[2, 2],
[1, 1],
]
tupled_data = [tuple(d) for d in data] # [(1, 1), (2, 2), (1, 1)]
distinct_data = set(tupled_data) # {(1, 1), (2, 2)}
# List로 타입 변환
[list(d) for d in set(tupled_data)] # [[1, 1], [2, 2]]
'Python > Python' 카테고리의 다른 글
reduce를 언제 사용할 수 있을까 (0) | 2024.06.05 |
---|---|
== 와 is 비교 (0) | 2020.12.28 |
function의 default parameter 사용 시 주의점 (0) | 2020.12.28 |
*args, **kwargs에 대해서 (0) | 2020.12.28 |
댓글