Python 생성기를 사용하여 불규칙 목록 평면화
임의로 중첩된 목록 목록을 평면화하는 문제는 흔히 발생하지만 기존 솔루션은 심각한 실패를 겪는 경우가 많습니다. 중첩된 구조. 특히 [[[1, 2, 3], [4, 5]], 6]과 같은 목록은 대부분의 솔루션을 사용하여 평면화할 수 없습니다.
다른 질문의 솔루션을 기반으로 하는 다음 함수는 이러한 목록을 효과적으로 평면화할 수 있습니다.
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
그러나 이 기능이 작동하는 동안 생성기를 사용하면 가독성과 성능 측면에서 향상될 수 있습니다.
반복 가능한 ABC가 포함된 Python 2
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
반복 가능한 ABC 및 Yield From이 포함된 Python 3
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!