Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 두 튜플 리스트 간 일치하는 튜플 제거하기

Python에서 두 개의 튜플 리스트를 비교하여 서로 일치하는(중복되는) 튜플을 제거해야 하는 경우가 있습니다. 이럴 때 리스트 컴프리헨션(list comprehension)을 활용하면 간결하고 효율적으로 처리할 수 있습니다.

기본 개념

리스트는 정수, 실수, 문자열 등 다양한 자료형의 값을 하나의 컨테이너에 저장할 수 있는 Python의 기본 자료구조입니다. 그중 튜플 리스트(list of tuples)는 말 그대로 여러 개의 튜플이 리스트 안에 담겨 있는 형태를 의미합니다.

리스트 컴프리헨션은 반복문을 한 줄로 압축하여 리스트를 순회하면서 원하는 연산이나 필터링을 수행할 수 있게 해주는 축약 문법입니다. 조건식과 함께 사용하면 특정 요소만 걸러내는 작업도 매우 직관적으로 구현할 수 있습니다.

예제 코드

아래 예제는 첫 번째 튜플 리스트에서 두 번째 리스트에 포함된 튜플들을 제거하는 과정을 보여줍니다.

my_list_1 = [('Hi', 'there'), ('Jane', 'Hi'), ('how', 'are'), ('you', '!')]
my_list_2 = [('Hi', 'there'), ('Hi', 'Jane')]

print("첫 번째 리스트 : ")
print(my_list_1)
print("두 번째 리스트 : ")
print(my_list_2)

my_result = [sub for sub in my_list_1 if sub not in my_list_2]

print("필터링된 튜플 리스트 : ")
print(my_result)

실행 결과

첫 번째 리스트 :
[('Hi', 'there'), ('Jane', 'Hi'), ('how', 'are'), ('you', '!')]
두 번째 리스트 :
[('Hi', 'there'), ('Hi', 'Jane')]
필터링된 튜플 리스트 :
[('Jane', 'Hi'), ('how', 'are'), ('you', '!')]

코드 설명

  • 두 개의 튜플 리스트를 정의한 뒤 콘솔에 출력하여 초기 상태를 확인합니다.
  • 리스트 컴프리헨션을 사용해 my_list_1의 각 튜플을 순회하면서, my_list_2에 존재하지 않는(not in) 튜플만 새로운 리스트에 담습니다.
  • 그 결과, 두 리스트에 공통으로 존재하는 튜플인 ('Hi', 'there')가 제거됩니다.
  • 주의할 점은 ('Jane', 'Hi')('Hi', 'Jane')처럼 요소의 순서가 다르면 서로 다른 튜플로 판단되어 제거되지 않는다는 것입니다.
  • 최종적으로 필터링된 결과 리스트가 콘솔에 출력됩니다.

성능 개선 팁

리스트가 매우 큰 경우 in 연산자를 리스트에 사용하면 O(n)의 시간이 걸려 전체 시간 복잡도가 O(n×m)까지 증가할 수 있습니다. 이때 my_list_2집합(set)으로 변환하면 멤버십 검사가 O(1)로 처리되어 성능이 크게 향상됩니다.

set_2 = set(my_list_2)
my_result = [sub for sub in my_list_1 if sub not in set_2]

이처럼 리스트 컴프리헨션과 집합을 함께 활용하면 대량의 데이터에서도 빠르고 깔끔하게 중복 튜플을 제거할 수 있습니다.