리스트 여러 개로 구성된 튜플(tuple of list)에서 중복 요소를 제거하면서 원래의 순서까지 유지해야 하는 경우가 있습니다. 이럴 때는 리스트 컴프리헨션(list comprehension)과 set 자료형을 함께 활용하면 간단하게 해결할 수 있습니다.
핵심 개념
리스트 컴프리헨션은 반복문과 조건문을 한 줄로 압축해 표현하는 파이썬 문법입니다. 리스트를 순회하면서 특정 연산을 수행하는 코드를 간결하고 가독성 있게 작성할 수 있게 해줍니다.
또한 파이썬은 기본적으로 set(집합) 자료형을 제공합니다. set은 중복 없는 고유한 값만 저장하며, 교집합(intersection), 차집합(difference), 합집합(union), 대칭차집합(symmetric difference) 같은 집합 연산에도 유용하게 활용됩니다.
예제 코드
my_tuple_1 = ([1, 21, 34], [11, 0, 98], [45, 67, 56])
print("리스트 튜플 출력 : ")
print(my_tuple_1)
temp_val = set()
my_result = [elem for elem in my_tuple_1 if not (tuple(elem) in temp_val or temp_val.add(tuple(elem)))]
print("중복이 제거된 결과 : ")
print(my_result)
실행 결과
리스트 튜플 출력 : ([1, 21, 34], [11, 0, 98], [45, 67, 56]) 중복이 제거된 결과 : [[1, 21, 34], [11, 0, 98], [45, 67, 56]]
동작 원리 설명
- 먼저 리스트 여러 개로 구성된 튜플을 정의하고 콘솔에 출력합니다.
- 중복 여부를 확인하기 위해 빈 set(
temp_val)을 생성합니다. - 리스트 컴프리헨션으로 튜플의 각 요소를 순회하면서, 해당 요소가 아직 set에 없다면 결과 리스트에 추가하고 동시에 튜플 형태로 변환해 set에 저장합니다.
- 이 과정을 거치면 중복이 제거된 고유한 값들만 남게 되며, 원래 입력 순서는 그대로 유지됩니다.
- 최종 결과를 변수
my_result에 할당한 뒤 콘솔에 출력합니다.
참고: 리스트는 변경 가능(mutable)한 자료형이라 set에 직접 저장할 수 없습니다. 따라서 tuple(elem)처럼 불변(immutable)인 튜플로 변환한 후 set에 추가해야 하며, 이 변환 덕분에 각 리스트를 고유 식별자처럼 비교할 수 있습니다.