깊게 중첩된 리스트(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)를 염두에 두어야 합니다.