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

Python에서 리스트 속 중첩 튜플을 하나의 튜플로 병합하는 방법

리스트 안에 중첩된 튜플 구조를 하나의 튜플로 평탄화(flatten)해야 하는 경우가 있습니다. 이럴 때 튜플을 입력값으로 받는 재귀 함수를 정의하면 간단하게 해결할 수 있습니다.

함수는 전달받은 튜플을 순회하면서, 더 이상 분해할 수 없는 요소에 도달할 때까지 자기 자신을 반복적으로 호출하여 최종 결과를 만들어냅니다.

아래는 실제 동작 예시입니다.

예제 코드

def flatten_tuple(my_tuple):

    if isinstance(my_tuple, tuple) and len(my_tuple) == 2 and not isinstance(my_tuple[0], tuple):
        my_result = [my_tuple]
        return tuple(my_result)

    my_result = []
    for sub in my_tuple:
        my_result += flatten_tuple(sub)
    return tuple(my_result)

my_tuple = ((35, 46), ((67, 70), (8, 11), (10, 111)), (((21, 12), (3, 4))))

print("The tuple is : " )
print(my_tuple)

my_result = flatten_tuple(my_tuple)

print("The flattened tuple is : ")
print(my_result)

실행 결과

The tuple is :
((35, 46), ((67, 70), (8, 11), (10, 111)), ((21, 12), (3, 4)))
The flattened tuple is :
((35, 46), (67, 70), (8, 11), (10, 111), (21, 12), (3, 4))

코드 설명

  • 'flatten_tuple'이라는 이름의 함수를 정의하고, 매개변수로 튜플을 받습니다.

  • 먼저 해당 값이 실제 튜플인지, 그리고 길이가 2인지 확인합니다.

  • 두 조건을 모두 만족하면 더 이상 분해할 필요가 없으므로 그대로 반환합니다.

  • 그렇지 않은 경우에는 빈 리스트를 하나 생성합니다.

  • 튜플의 각 하위 요소를 순회하면서 함수를 재귀 호출하고, 평탄화된 결과를 리스트에 누적합니다.

  • 모든 순회가 끝나면 리스트를 튜플로 변환하여 최종 결과로 반환합니다.

  • 함수 외부에서 중첩된 튜플을 하나 정의한 뒤 콘솔에 출력합니다.

  • 정의한 함수에 이 튜플을 인자로 전달하여 호출합니다.

  • 평탄화된 결과가 콘솔에 출력됩니다.

참고 사항

재귀 방식 외에도 yield from 문법을 활용한 제너레이터 기반 접근이나, 반복문과 스택을 이용한 비재귀 방식으로도 중첩 튜플을 평탄화할 수 있습니다. 데이터의 깊이가 매우 깊다면 Python의 재귀 호출 한도(recursion limit)에 유의하는 것이 좋습니다.