Python - 중첩 리스트 평탄화(1차원 리스트 변환)

파이썬에서 중첩 리스트(Nested list, 리스트 안에 리스트)를 1차원 리스트로 평탄화하는 방법에 대해서 알아보겠습니다.

1. 재귀 함수(Recursive)를 이용한 방법

아래와 같이 리스트 안에 리스트가 중첩되어있는 경우, 아래와 같이 재귀함수를 구현하여 평탄화 할 수 있습니다. append(item)은 리스트에 item을 추가하는 함수로, 재귀로 모든 요소를 탐색하면서 값만 추가합니다.

def flatten_list(lst):
    result = []
    for item in lst:
        if isinstance(item, list):
            result.extend(flatten_list(item))
        else:
            result.append(item)
    return result

nested_list = [[1, 2, [3]], [4, [5, 6]], 7, [8, 9]]
flattened_list = flatten_list(nested_list)
print(flattened_list)

Output:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

2. 리스트 컴프리헨션과 재귀를 이용한 방법

위와 방식은 동일하지만, 재귀함수를 구현할 때 리스트 컴프리헨션을 사용하여 아래와 같이 구현할 수 있습니다.

def flatten_list(lst):
    return [item for sublist in lst for item in flatten_list(sublist)] if isinstance(lst, list) else [lst]

nested_list = [[1, 2, [3]], [4, [5, 6]], 7, [8, 9]]
flattened_list = flatten_list(nested_list)
print(flattened_list)

Output:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

3. itertools를 이용한 방법

itertools를 이용하여 중첩 리스트를 평탄화할 수 있습니다.

이 방법은 리스트의 요소들이 모두 리스트(iterable)인 경우만 가능합니다. [[1, 2], 3]의 경우, 3은 iterable이 아니기 때문에 에러가 발생할 수 있습니다.

아래와 같이 2차원 리스트인 경우, 이 방법으로 평탄화할 수 있습니다.

import itertools

list1 = [[1, 2], [3, 4], [5, 6], [7, 8, 9]]
list2 = list(itertools.chain(*list1))
print(list2)

Output:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha