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

Python 중첩 튜플(튜플의 튜플)에서 특정 요소 존재 여부 확인하는 방법

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 연산으로 처리할 수 있다는 장점이 있습니다. 두 방법 모두 가독성이 좋으며, 데이터 크기가 클 경우에는 불필요한 리스트 생성을 피할 수 있는 제너레이터 기반 접근이 유리합니다.