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

중첩 리스트를 튜플 리스트로 평탄화하는 Python 프로그램

깊게 중첩된 리스트(nested list)를 튜플 리스트 형태로 평탄화(flatten)해야 하는 경우가 종종 있습니다. 이럴 때 리스트를 매개변수로 받는 함수를 정의하고, isinstance 메서드를 사용해 각 요소가 리스트 타입인지 확인하면 됩니다. 리스트라면 함수를 재귀적으로 호출해 내부를 탐색하고, 아니라면 결과 리스트에 요소를 추가하는 방식으로 최종 출력을 만들 수 있습니다.

예제 코드

아래는 위 로직을 구현한 예시입니다.

def convert_nested_tuple(my_list):
   for elem in my_list:
      if isinstance(elem, list):
         convert_nested_tuple(elem)
      else:
         my_result.append(elem)
   return my_result

my_list = [[[(3, 62)]], [[[(57, 49)]]], [[[[(12, 99)]]]]]

print("The list is :")
print(my_list)

my_result = []
my_result = convert_nested_tuple(my_list)

print("The list is :")
print(my_result)

실행 결과

The list is :
[[[(3, 62)]], [[[(57, 49)]]], [[[[(12, 99)]]]]]
The list is :
[(3, 62), (57, 49), (12, 99)]

코드 설명

  • convert_nested_tuple이라는 이름의 함수를 정의하며, 이 함수는 리스트를 매개변수로 받습니다.

  • 리스트의 각 요소를 순회(iterate)합니다.

  • isinstance 메서드를 사용해 중첩 리스트의 각 요소가 리스트 타입인지 검사합니다.

  • 요소가 리스트라면 같은 함수를 재귀적으로 호출해 더 깊은 계층을 탐색합니다.

  • 리스트가 아니라면 해당 요소를 미리 선언해 둔 빈 리스트에 추가(append)합니다.

  • 모든 처리가 끝나면 평탄화된 리스트를 결과로 반환합니다.

  • 함수 외부에서 튜플을 포함한 중첩 리스트를 정의하고 콘솔에 출력합니다.

  • 결과를 저장할 빈 리스트를 하나 생성합니다.

  • 앞서 정의한 중첩 리스트를 인자로 전달하며 함수를 호출합니다.

  • 평탄화된 최종 결과를 콘솔에 출력합니다.

참고 사항

위 코드에서는 결과를 담는 my_result 변수가 함수 외부(전역 범위)에 선언되어 있습니다. 이 방식도 동작하지만, 함수의 재사용성과 안전성을 높이려면 결과 리스트를 매개변수로 함께 전달하거나 함수 내부에서 새 리스트를 생성해 반환하는 구조로 리팩토링하는 것이 좋습니다. 또한 중첩 깊이가 매우 깊은 데이터를 다룰 때는 Python의 재귀 호출 한도(recursion limit)를 염두에 두어야 합니다.