리스트 A가 주어져 있으며, 이 리스트 안에는 중첩된 튜플이 포함되어 있습니다. 이번 글에서 다룰 과제는 리스트를 순회하면서 튜플을 만나기 전까지 등장하는 요소의 개수를 세는 것입니다. 이를 위해 파이썬의 isinstance() 함수를 활용합니다.
isinstance() 함수란?
isinstance() 함수는 두 개의 매개변수를 받습니다.
- object: 검사할 대상 객체
- classinfo: 비교 기준이 되는 클래스, 타입 또는 클래스·타입들의 튜플
이 함수는 객체가 해당 클래스(또는 그 하위 클래스)의 인스턴스이거나, classinfo로 전달된 튜플의 요소 중 하나에 해당하면 True를 반환하고, 그렇지 않으면 False를 반환합니다. 이 특성을 이용하면 리스트를 순회하면서 각 요소가 튜플인지 손쉽게 판별할 수 있습니다.
입력 : A = [4, 5, 6, 10, 22, 33, (1, 2, 3), 11, 2, 4] 출력 : 6
위 예시에서 튜플 (1, 2, 3) 앞에는 숫자 요소가 6개 존재하므로 결과는 6이 됩니다.
알고리즘
- 리스트가 주어집니다.
- 카운터 변수
c를 선언하고 0으로 초기화합니다. - 리스트를 순회하면서 현재 요소가 튜플인지 검사합니다.
- 튜플이 아니면 카운터를 1 증가시키고, 튜플을 만나면 반복문을 즉시 종료합니다.
- 카운터 값
c를 반환합니다.
예제 코드
# 리스트에서 튜플을 만나기 전까지 요소 개수를 세는 프로그램
def countelement(M):
c = 0
for i in M:
if isinstance(i, tuple):
break
c = c + 1
return c
# 드라이버 코드
A = [4, 5, 6, 10, 22, 33, (1, 2, 3), 11, 2, 4]
print("RESULT ::>", countelement(A))
실행 결과
RESULT ::> 6
코드 동작 원리
리스트 A를 처음부터 순회하면 4 → 5 → 6 → 10 → 22 → 33까지는 모두 정수이므로 isinstance(i, tuple)이 False를 반환하고, 카운터가 하나씩 증가합니다. 일곱 번째 요소인 (1, 2, 3)은 튜플이므로 조건식이 True가 되어 break 문이 실행되고 반복문이 종료됩니다. 최종적으로 튜플 이전의 요소 개수인 6이 출력됩니다.
이 방법은 중첩된 자료구조에서 특정 타입의 경계 지점을 찾아야 할 때 유용하게 활용할 수 있으며, isinstance()의 두 번째 인자에 다른 타입을 넣으면 튜플이 아닌 문자열, 딕셔너리 등 다른 자료형도 같은 방식으로 감지할 수 있습니다.