불규칙한 중첩 목록을 평면화하는 방법
목록 구조 평면화에 대한 논의가 있지만 목록이 다음과 같은 경우 솔루션이 부족한 경향이 있습니다. 깊이 중첩되어 있습니다. 한 가지 효과적인 접근 방식은 다음과 같습니다.
재귀 함수 접근 방식
def flatten(x): result = [] for el in x: if hasattr(el, "__iter__") and not isinstance(el, basestring): result.extend(flatten(el)) else: result.append(el) return result
이 함수는 각 요소가 반복 가능한지(문자열 제외) 확인하고 true인 경우 재귀적으로 평면화합니다. . 반복할 수 없는 요소는 결과에 추가됩니다.
생성기 함수 접근 방식
생성기 함수를 사용하면 평면화 프로세스의 가독성과 성능을 향상시킬 수 있습니다.
Python 2(Iterable 사용 ABC):
from collections import Iterable def flatten(xs): for x in xs: if isinstance(x, Iterable) and not isinstance(x, basestring): for item in flatten(x): yield item else: yield x
Python 3(str 및 바이트에 튜플 사용):
from collections.abc import Iterable def flatten(xs): for x in xs: if isinstance(x, Iterable) and not isinstance(x, (str, bytes)): yield from flatten(x) else: yield x
이 생성기 함수는 평면화된 요소를 느리게 반환하여 메모리 사용량을 최적화합니다. . 필요에 따라 반복하거나 목록으로 변환할 수 있습니다.
위 내용은 Python에서 불규칙하게 중첩된 목록을 효율적으로 평면화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!