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

Python 튜플에서 중첩된 튜플(레코드) 제거하는 방법

튜플 안에 포함된 중첩 튜플(레코드)을 제거해야 하는 경우, 간단한 반복문과 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 조건과 제너레이터 표현식을 결합하면 가독성과 성능 면에서 모두 유리한 코드를 작성할 수 있습니다.