튜플 레코드로 구성된 데이터에서 교집합을 구해야 할 때는 리스트 컴프리헨션(list comprehension)을 활용하면 간단하게 해결할 수 있습니다.
리스트 컴프리헨션은 리스트를 순회하면서 원하는 연산을 수행할 수 있도록 해주는 파이썬의 간결한 문법입니다. 별도의 반복문 없이 한 줄로 조건 검색과 필터링을 동시에 처리할 수 있어 가독성과 생산성이 뛰어납니다.
리스트는 정수, 실수, 문자열 등 서로 다른 데이터 타입의 값을 함께 저장할 수 있는 자료구조입니다. 튜플 리스트란 리스트 안에 여러 개의 튜플이 포함된 형태를 말하며, 아래 예제를 통해 확인해 보겠습니다.
예제 코드
my_list_1 = [('Hi',1) , ('there',11), ('Will', 56)]
my_list_2 = [('Hi',1) ,('are',7) ,('you',10)]
print("첫 번째 리스트 : ")
print(my_list_1)
print("두 번째 리스트 : ")
print(my_list_2)
my_result = [elem_1 for elem_1 in my_list_1
for elem_2 in my_list_2 if elem_1 == elem_2]
print("두 튜플 리스트의 교집합 : ")
print(my_result)실행 결과
첫 번째 리스트 :
[('Hi', 1), ('there', 11), ('Will', 56)]
두 번째 리스트 :
[('Hi', 1), ('are', 7), ('you', 10)]
두 튜플 리스트의 교집합 :
[('Hi', 1)]코드 설명
- 두 개의 튜플 리스트를 정의하고 콘솔에 출력합니다.
- 리스트 컴프리헨션을 통해 두 리스트를 모두 순회하며 대응하는 요소들을 비교합니다.
- 두 요소가 완전히 같다면 해당 요소를 결과 변수에 할당합니다.
- 같지 않은 요소는 무시되고 최종적으로 공통 요소만 남습니다.
- 교집합 결과가 콘솔에 출력됩니다.
참고: 더 효율적인 방법
데이터 크기가 클 경우 중첩 반복문 방식(O(n×m))보다 집합(set)을 활용하는 것이 성능 면에서 유리합니다. 튜플은 해시 가능(hashable)한 자료형이므로 set으로 변환하여 교집합 연산(&)을 수행하면 O(n+m) 시간 복잡도로 처리할 수 있습니다.
my_result = list(set(my_list_1) & set(my_list_2)) print(my_result)
다만 집합 방식은 요소의 순서가 유지되지 않으므로, 순서가 중요하다면 위의 리스트 컴프리헨션 방식을 사용하는 것이 좋습니다.