안녕세계
[Python] 2차원 list 중복 제거 본문
[Python] 2차원 list 중복 제거
Junhong Kim 2019. 1. 8. 22:43파이썬 리스트의 중복을 제거하고 싶을때 1차원 리스트는 set()
를 사용하면 편리하게 제거할 수 있습니다.
items = [1, 2, 2, 3, 3, 3]
print(set(items))
# {1, 2, 3}
이를 활용하여 2차원 리스트도 다음과 같은 방법으로 중복을 제거할 수 있습니다.
items = [[1, 2], [2, 1], [1,3]]
print(items)
# [[1, 2], [2, 1], [1, 3]]
items = list(set([tuple(set(item)) for item in item]))
print(items)
# [(1, 2), (1, 3)]
formatted = []
for item in items:
formatted.append(str(item[0], str(item[1])))
print(formatted)
# 1-2, 1-3
2차원 리스트 중복제거 과정
items = [[1, 2], [2, 1], [1, 3]]
print(set(items[0]))
# {1, 2}
print(tuple(set(items[0])))
# (1, 2)
print([item for item in items])
# [[1, 2], [2, 1], [1, 3]]
print([set(item) for item in items])
# [{1, 2}, {1, 2}, {1, 3}]
print([tuple(set(item)) for item in items])
# [(1, 2), (1, 2), (1, 3)]
print(set([tuple(set(item)) for item in items]))
# {(1, 2), (1, 3)}
print(list(set([tuple(set(item)) for item in items]))
# [(1, 2), (1, 3)]
2차원 리스트 중복제거 설명
list(set([tuple(set(item)) for item in items]))
1. for item in items
- for 문을 수행하여 item을 가져옵니다.
- 현재 값: [1, 2]
2. set(item)
- item을 순서없는 집합으로 만듭니다.
- 현재 값: {1, 2}
3. tuple(set(item)):
- tuple은 변경할 수 없고 hashable
하다는 점을 이용해서 list 값을 고유한 값(tuple)으로 만듭니다.
- 현재 값: (1, 2)
4. [tuple(set(item)) for item in items]
- list comprehension의 결과로 리스트가 반환됩니다.
- 현재 값: [(1, 2), (1, 2), (1, 3)]
5. set([tuple(set(item)) for item in items])
- tuple로 이루어진 list를 set()를 이용해서 중복을 제거합니다.
- 현재 값: {(1, 2), (1, 3)}
6. list(set([tuple(set(item)) for item in items]))
- set 타입을 list 타입으로 변환합니다.
- 최종 값: [(1, 2), (1, 3)]
References
https://stackoverflow.com/questions/33423008/remove-duplicate-sets-from-lists
https://stackoverflow.com/questions/14535730/what-do-you-mean-by-hashable-in-python
'Language > Python' 카테고리의 다른 글
[Python] list에서 dictionary 속성 검색 (0) | 2019.01.10 |
---|---|
[Python] Object 속성 확인 (0) | 2019.01.09 |
[Python] string 자료형 (0) | 2019.01.07 |
[Python] slice & extended slice 표기법 (0) | 2019.01.06 |
[Python] map 함수 (0) | 2019.01.05 |