Heim > Backend-Entwicklung > Python-Tutorial > Wie können unregelmäßig verschachtelte Listen in Python mithilfe rekursiver und generatorbasierter Ansätze effizient reduziert werden?

Wie können unregelmäßig verschachtelte Listen in Python mithilfe rekursiver und generatorbasierter Ansätze effizient reduziert werden?

DDD
Freigeben: 2024-12-28 03:19:15
Original
327 Leute haben es durchsucht

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

Eine unregelmäßig verschachtelte Liste von Listen reduzieren

Die Aufgabe, eine verschachtelte Liste von Listen zu reduzieren, kann eine Herausforderung sein, insbesondere wenn die Verschachtelung unregelmäßig ist. Die gestellte Frage untersucht die Wirksamkeit des folgenden Flattening-Algorithmus:

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
Nach dem Login kopieren

Die Frage wirft jedoch auch die Möglichkeit alternativer Ansätze unter Verwendung von Generatorfunktionen auf.

Generator-Based Flattening

Generatorbasierte Funktionen können den Abflachungsprozess vereinfachen und möglicherweise die Leistung verbessern. Hier sind Beispiele für Python 2 und 3:

Python 2

Verwendung des in Python 2.6 eingeführten iterierbaren 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
Nach dem Login kopieren

Python 3

In In Python 3 ist der Basisstring-Typ nicht mehr vorhanden und stattdessen kann das Tupel (str, bytes) verwendet werden. Darüber hinaus vereinfacht die Ausbeute des Operators die Iteration über Generatoren:

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
Nach dem Login kopieren

Der Generator-basierte Ansatz hat den Vorteil, dass er prägnanter und potenziell effizienter ist, da er Zwischenlisten vermeidet und die Ergebnisse Schritt für Schritt akkumuliert .

Das obige ist der detaillierte Inhalt vonWie können unregelmäßig verschachtelte Listen in Python mithilfe rekursiver und generatorbasierter Ansätze effizient reduziert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage