중첩된 목록 목록을 평면화하는 작업은 어려울 수 있으며, 특히 중첩이 불규칙한 경우 더욱 그렇습니다. 제시된 질문은 다음 평탄화 알고리즘의 효율성을 조사합니다.
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
그러나 이 질문은 생성기 함수를 사용하는 대체 접근 방식의 가능성도 제기합니다.
제너레이터 기반 기능은 평탄화 프로세스를 단순화하고 잠재적으로 성능을 향상시킬 수 있습니다. 다음은 Python 2 및 3에 대한 예입니다.
Python 2.6에 도입된 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
In Python 3에서는 기본 문자열 유형이 더 이상 존재하지 않으며 튜플(str, bytes) 대신 사용할 수 있습니다. 또한 연산자의 산출량은 생성기에 대한 반복을 단순화합니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!