Python에서 리스트의 리스트를 평탄화하는 방법
Emily Parker
Product Engineer · Leapcell

Key Takeaways
- 리스트 컴프리헨션 또는
itertools.chain()
을 사용하는 것이 가장 간결하고 효율적인 방법입니다. flatten_recursive()
는 임의의 깊이로 중첩된 리스트를 처리할 수 있습니다.- 메서드 선택은 리스트 구조와 성능 요구 사항에 따라 달라야 합니다.
파이썬에서 리스트의 리스트를 평탄화하는 것은 중첩된 리스트 구조를 단일 1차원 리스트로 변환하는 것을 의미합니다. 이는 행렬이나 JSON 데이터와 같이 중첩된 리스트에 저장된 데이터를 처리할 때 흔히 발생하는 작업입니다. 다음은 이를 달성하기 위한 몇 가지 방법이며, 각 방법에는 고유한 장점이 있습니다.
1. .extend()
와 함께 For 루프 사용
이 방법은 각 하위 리스트를 반복하고 각 하위 리스트의 요소로 새 리스트를 확장하는 것을 포함합니다.
def flatten_extend(nested_list): flat_list = [] for sublist in nested_list: flat_list.extend(sublist) return flat_list
이 접근 방식은 간단하고 읽기 쉬우므로 초보자에게 적합합니다.
2. 리스트 컴프리헨션 사용
리스트 컴프리헨션은 리스트의 리스트를 평탄화하는 간결한 방법을 제공합니다.
def flatten_comprehension(nested_list): return [item for sublist in nested_list for item in sublist]
이 한 줄 코드는 효율적이며 파이썬 코드베이스에서 널리 사용됩니다.
3. itertools.chain()
사용
itertools
모듈은 리스트의 리스트를 평탄화하는 데 사용할 수 있는 chain()
함수를 제공합니다.
import itertools def flatten_chain(nested_list): return list(itertools.chain.from_iterable(nested_list))
이 메서드는 효율적이며 중첩된 루프의 오버헤드를 피하므로 대규모 데이터 세트에 적합합니다.
4. functools.reduce()
사용
functools
모듈의 reduce()
함수는 하위 리스트를 단일 리스트로 연결할 수 있습니다.
from functools import reduce from operator import add def flatten_reduce(nested_list): return reduce(add, nested_list, [])
이 접근 방식이 작동하지만 일반적으로 가독성이 떨어지고 간단한 평탄화 작업에는 권장되지 않습니다.
5. sum()
사용
내장 함수 sum()
은 빈 리스트를 시작 값으로 지정하여 리스트의 리스트를 평탄화할 수도 있습니다.
def flatten_sum(nested_list): return sum(nested_list, [])
이 방법은 간결하지만 sum()
이 리스트 연결을 처리하는 방식 때문에 대규모 리스트에는 효율성이 떨어질 수 있습니다.
6. 깊이 중첩된 리스트에 재귀 사용
임의의 깊이로 중첩된 리스트의 경우 재귀적 접근 방식을 사용할 수 있습니다.
def flatten_recursive(nested_list): flat_list = [] for item in nested_list: if isinstance(item, list): flat_list.extend(flatten_recursive(item)) else: flat_list.append(item) return flat_list
이 메서드는 모든 깊이의 중첩된 리스트를 처리하지만 최대 재귀 깊이 오류를 피하기 위해 주의해서 사용해야 합니다.
7. 숫자 데이터에 NumPy 사용
숫자 데이터를 사용하는 경우 NumPy는 배열을 평탄화하는 효율적인 방법을 제공합니다.
import numpy as np def flatten_numpy(nested_list): return np.array(nested_list).flatten().tolist()
이 접근 방식은 수치 계산에 매우 효율적이며 데이터 과학 응용 프로그램에서 일반적으로 사용됩니다.
결론
각 방법에는 고유한 사용 사례가 있습니다.
- For 루프 및 리스트 컴프리헨션: 가독성과 단순성에 가장 적합합니다.
itertools.chain()
: 대규모 데이터 세트에 효율적입니다.reduce()
및sum()
: 간결하지만 성능 저하가 있을 수 있습니다.- 재귀: 깊이 중첩된 리스트에 적합합니다.
- NumPy: 수치 데이터 처리에 이상적입니다.
특정 요구 사항 및 데이터의 특성에 가장 적합한 방법을 선택하십시오.
FAQs
리스트 컴프리헨션을 사용하십시오: [item for sublist in nested_list for item in sublist]
.
재귀적 방법(flatten_recursive
)만이 임의 깊이의 중첩을 처리할 수 있습니다.
더 나은 성능을 위해 숫자 데이터를 처리할 때 NumPy를 사용하십시오.
저희는 Leapcell이며, 파이썬 프로젝트 호스팅을 위한 최고의 선택입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무료로 무제한 프로젝트 배포
- 사용량에 대해서만 지불하십시오. 요청도 없고 요금도 없습니다.
타의 추종을 불허하는 비용 효율성
- 유휴 요금 없이 사용량에 따라 지불하십시오.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성 및 고성능
- 높은 동시성을 쉽게 처리하기 위한 자동 확장.
- 운영 오버헤드가 전혀 없으며 구축에만 집중하십시오.
문서에서 자세히 알아보십시오!
X에서 저희를 팔로우하세요: @LeapcellHQ