튜플 안에서 서로 다른(유사하지 않은) 요소를 찾아야 할 때, Python의 set 자료형과 '^' 연산자를 함께 사용하면 간단하게 해결할 수 있습니다.
set 자료형이란?
Python은 고유한(unique) 요소만을 저장하는 set이라는 자료형을 기본으로 제공합니다. set은 중복을 허용하지 않기 때문에 두 데이터 집합 간의 차이를 비교하는 데 매우 유용합니다.
또한 set은 교집합(intersection), 차집합(difference), 합집합(union), 대칭차집합(symmetric difference) 같은 집합 연산을 효율적으로 수행할 수 있습니다.
'^' 연산자의 역할
'^' 연산자는 비트(bitwise) 연산자로, XOR(배타적 논리합) 연산을 수행합니다. 두 비트 중 하나만 1일 때 결과 비트가 1이 되며, 이 특성을 응용하면 두 set 사이에 한쪽에만 존재하는 요소, 즉 서로 다른 요소를 손쉽게 추출할 수 있습니다.
아래 예제를 통해 실제 동작 방식을 확인해 보겠습니다.
예제 코드
my_tuple_1 = ((7, 8), (3, 4), (3, 2))
my_tuple_2 = ((9, 6), (8, 2), (1, 4))
print("첫 번째 튜플 : ")
print(my_tuple_1)
print("두 번째 튜플 : ")
print(my_tuple_2)
my_result = tuple(set(my_tuple_1) ^ set(my_tuple_2))
print("두 튜플에서 서로 다른 요소들 : ")
print(my_result)실행 결과
첫 번째 튜플 : ((7, 8), (3, 4), (3, 2)) 두 번째 튜플 : ((9, 6), (8, 2), (1, 4)) 두 튜플에서 서로 다른 요소들 : ((3, 4), (9, 6), (1, 4), (8, 2), (3, 2), (7, 8))
코드 설명
- 두 개의 중첩 튜플(튜플의 튜플)을 정의하고 콘솔에 출력합니다.
- 각 튜플을 set으로 변환한 뒤 '^' 연산자를 적용하여 양쪽에 공통으로 존재하지 않는 요소들만 추출합니다.
- 연산 결과는 변수에 저장되며, tuple() 함수를 통해 다시 튜플 형태로 변환됩니다.
- 최종 결과가 콘솔에 출력됩니다.
참고 사항
set은 순서를 보장하지 않기 때문에 실행 결과의 요소 순서는 매번 달라질 수 있습니다. 순서가 중요하다면 결과를 sorted() 함수로 정렬하여 사용하는 것이 좋습니다. 또한 이 방법은 튜플의 요소들이 해시 가능(hashable)해야 정상적으로 동작한다는 점도 기억해 두세요.