Python에서는 튜플 안에 또 다른 튜플을 요소로 포함하는 중첩 튜플(nested tuple) 구조를 만들 수 있습니다. 이 글에서는 주어진 값이 튜플의 튜플 내부에 요소로 존재하는지 확인하는 두 가지 대표적인 방법을 소개합니다.
1. any() 함수 활용하기
any() 함수는 반복 가능한 객체의 요소 중 하나라도 참(True)이면 True를 반환합니다. for 루프와 함께 사용하면 각 하위 튜플(sub-tuple)에 특정 값이 있는지 효율적으로 검사할 수 있습니다. 조건 전체를 if-else 문으로 감싸서 결과를 출력하도록 작성합니다.
예제 코드
Atuple = [('Mon',10),('Tue',8),('Wed',8),('Thu',5)]
# 주어진 튜플
print("Given tuple: ",Atuple)
# any() 사용
if any('Tue' in i for i in Atuple):
print("present")
else :
print("Not present")
if any(3 in i for i in Atuple):
print("present")
else :
print("Not present")실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Given tuple: [('Mon', 10), ('Tue', 8), ('Wed', 8), ('Thu', 5)]
present
Not present첫 번째 검사에서는 문자열 'Tue'가 하위 튜플에 존재하므로 "present"가 출력되고, 두 번째 검사에서는 숫자 3이 어디에도 없으므로 "Not present"가 출력됩니다.
2. itertools.chain 활용하기
itertools 모듈의 chain() 함수는 첫 번째 이터러블(iterable)의 요소를 모두 소진한 뒤 다음 이터러블로 넘어가는 방식으로, 모든 이터러블의 요소를 하나의 연속된 시퀀스처럼 처리해 줍니다. 따라서 *Atuple처럼 언패킹(unpacking)하여 중첩 튜플의 모든 요소를 펼친 후, if 문으로 원하는 값의 존재 여부를 간단히 확인할 수 있습니다.
예제 코드
import itertools
Atuple = (('Mon',10),('Tue',8),('Wed',8),('Thu',5))
# 주어진 튜플
print("Given tuple: ",Atuple)
# chain() 사용
if ('Wed' in itertools.chain(*Atuple)) :
print("Wed is present")
else :
print("Wed is not present")
if (11 in itertools.chain(*Atuple)) :
print("11 is present")
else :
print("11 is not present")실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Given tuple: (('Mon', 10), ('Tue', 8), ('Wed', 8), ('Thu', 5))
Wed is present
11 is not present정리
중첩 튜플에서 특정 값의 존재 여부를 확인할 때는 상황에 따라 적절한 방법을 선택하면 됩니다. any() 함수는 제너레이터 표현식과 결합하여 메모리 효율적으로 조건을 검사할 수 있고, itertools.chain()은 중첩 구조를 한 번에 평탄화(flatten)하여 단순한 in 연산으로 처리할 수 있다는 장점이 있습니다. 두 방법 모두 가독성이 좋으며, 데이터 크기가 클 경우에는 불필요한 리스트 생성을 피할 수 있는 제너레이터 기반 접근이 유리합니다.