> 백엔드 개발 > 파이썬 튜토리얼 > 재귀 및 생성기 기반 접근 방식을 사용하여 Python에서 불규칙하게 중첩된 목록을 어떻게 효율적으로 평면화할 수 있습니까?

재귀 및 생성기 기반 접근 방식을 사용하여 Python에서 불규칙하게 중첩된 목록을 어떻게 효율적으로 평면화할 수 있습니까?

DDD
풀어 주다: 2024-12-28 03:19:15
원래의
305명이 탐색했습니다.

How Can Irregularly Nested Lists Be Efficiently Flattened in Python Using Recursive and Generator-Based Approaches?

비정상적으로 중첩된 목록 목록 평면화

중첩된 목록 목록을 평면화하는 작업은 어려울 수 있으며, 특히 중첩이 불규칙한 경우 더욱 그렇습니다. 제시된 질문은 다음 평탄화 알고리즘의 효율성을 조사합니다.

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

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
로그인 후 복사

Python 3

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿