2차원 배열(list) 중복 제거

Python3.6 · 2019. 9. 19. 23:31
>>> data = [['홍길동', 2019022872, '파이썬의 이해', 'A+'], ['김영희', 2019012872, '파이썬의 이해', 'C+'], ['홍길동', 2019022872, '파이썬의 이해', 'A+'], ['김철수', 2019022873, '파이썬의 이해', 'A']]
>>> dup = list(set(map(tuple, data)))

>>> print(dup)
[('홍길동', 2019022872, '파이썬의 이해', 'A+'), ('김영희', 2019012872, '파이썬의 이해', 'C+'), ('김철수', 2019022873, '파이썬의 이해', 'A')]

 

리스트 내부의 정렬 순서를 유지하는 것도 중요해서 검색해보니 바로 나왔습니다.

tuple은 hashable한 자료형이라서 2차원 튜플에 set 함수를 적용해도 중복 제거가 된다고 합니다.

 

>>> test = [['a', 'b'], ['a', 'b'], ['c']]
>>> set(t)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: unhashable type: 'list'

실제로 2차원 리스트에 set 함수를 적용했더니 타입에러가 떴습니다.

 

>>> t = (('a', 'b'), ('a', 'b'), ('c'))
>>> set(t)
{'c', ('a', 'b')}

2차원 튜플은 set 함수가 잘 적용되네요!

원소가 1개인 경우에는 튜플이 되지 않아서 string으로 바뀌었습니다.. 실제 데이터를 다룰 때는 조심해야겠습니다.

 

 

* 참고 : stackoverflow