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

파이썬 리스트 안의 리스트를 하나의 평면(flat) 리스트로 만드는 방법

리스트 객체의 각 항목 자체가 또 다른 리스트인 경우, 이 모든 하위 리스트들의 요소들을 하나의 새로운 리스트에 담은 것을 플랫 리스트(flat list, 평면 리스트)라고 합니다.

플랫 리스트란?

예를 들어 아래와 같이 리스트 안에 여러 개의 리스트가 중첩되어 있는 구조가 있을 때,

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

이것을 다음과 같이 요소들이 한 줄로 나열된 단일 리스트로 변환한 결과가 바로 플랫 리스트입니다.

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

플랫 리스트를 만드는 다양한 방법

1. 중첩 반복문 사용

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

for sublist in nested_list:
    for item in sublist:
        flat_list.append(item)

print(flat_list)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

가장 직관적인 방법으로, 외부 반복문으로 각 하위 리스트를 순회하고 내부 반복문으로 요소를 하나씩 추가합니다.

2. 리스트 컴프리헨션(List Comprehension) 사용

nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
flat_list = [item for sublist in nested_list for item in sublist]

print(flat_list)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

파이썬다운 간결한 문법으로 가장 널리 사용되는 방식입니다. 위의 중첩 반복문과 동일한 로직을 한 줄로 표현할 수 있습니다.

3. itertools.chain 사용

from itertools import chain

nested_list = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
flat_list = list(chain.from_iterable(nested_list))

print(flat_list)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

표준 라이브러리인 itertoolschain 함수를 활용하면 대량의 데이터를 효율적으로 처리할 수 있습니다.

4. extend() 메서드 활용

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

for sublist in nested_list:
    flat_list.extend(sublist)

print(flat_list)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

extend()는 하위 리스트의 요소들을 기존 리스트 끝에 개별적으로 추가하므로, 반복문과 함께 사용하기 좋습니다.

정리

중첩된 리스트를 평면화하는 작업은 데이터 전처리에서 매우 자주 등장합니다. 간단한 경우에는 리스트 컴프리헨션, 성능이 중요한 대규모 데이터에는 itertools.chain을 사용하는 것이 권장됩니다. 상황에 맞는 방법을 선택하여 깔끔하게 코드를 작성해 보세요.