본문 바로가기
Python/Python

2차원 List 에서 distinct 처리하기

by devson 2024. 2. 12.

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

댓글