튜플 안에 포함된 중첩 튜플(레코드)을 제거해야 하는 경우, 간단한 반복문과 isinstance 메서드, 그리고 enumerate 메서드를 활용하면 손쉽게 해결할 수 있습니다.
enumerate 메서드는 주어진 이터러블(iterable)에 카운터를 추가하여 반환하는 함수로, 인덱스와 요소를 동시에 순회할 때 유용합니다. isinstance 메서드는 특정 값이 지정한 데이터 타입에 속하는지 여부를 확인하는 데 사용됩니다.
아래는 실제 구현 예시입니다.
예제 코드
tuple_1 = (11, 23, (41, 25, 22), 19)
print("원본 튜플 : ")
print(tuple_1)
my_result = tuple()
for count, elem in enumerate(tuple_1):
if not isinstance(elem, tuple):
my_result = my_result + (elem, )
print("중첩 튜플 제거 후 결과 : ")
print(my_result)실행 결과
원본 튜플 : (11, 23, (41, 25, 22), 19) 중첩 튜플 제거 후 결과 : (11, 23, 19)
코드 설명
- 중첩 튜플을 포함하는 튜플을 정의하고 콘솔에 출력합니다.
- 결과를 저장할 빈 튜플을 하나 생성합니다.
enumerate를 사용해 원본 튜플의 각 요소를 인덱스와 함께 순회합니다.isinstance로 해당 요소가 튜플이 아닌지 검사하고, 튜플이 아니라면 결과 튜플에 추가합니다.- 최종적으로 필터링된 결과를 변수에 할당한 뒤 콘솔에 출력합니다.
참고: 더 파이썬다운 방법
위 방식은 반복문으로 요소를 하나씩 추가하기 때문에 코드가 다소 길어질 수 있습니다. 튜플 컴프리헨션(tuple comprehension)을 활용하면 같은 작업을 한 줄로 처리할 수 있습니다.
tuple_1 = (11, 23, (41, 25, 22), 19) my_result = tuple(elem for elem in tuple_1 if not isinstance(elem, tuple)) print(my_result) # (11, 23, 19)
이처럼 isinstance 조건과 제너레이터 표현식을 결합하면 가독성과 성능 면에서 모두 유리한 코드를 작성할 수 있습니다.