Language/Python

[Python] 2차원 list 중복 제거

Junhong Kim 2019. 1. 8. 22:43
728x90
반응형


파이썬 리스트의 중복을 제거하고 싶을때 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


728x90
반응형