Heim > Backend-Entwicklung > Python-Tutorial > Wie können Python-Generatoren beliebig verschachtelte Listen effizient reduzieren?

Wie können Python-Generatoren beliebig verschachtelte Listen effizient reduzieren?

Mary-Kate Olsen
Freigeben: 2024-12-21 15:02:09
Original
722 Leute haben es durchsucht

How Can Python Generators Efficiently Flatten Arbitrarily Nested Lists?

Unregelmäßige Listen mit Python-Generatoren verflachen

Das Problem der Verflachung einer willkürlich verschachtelten Liste von Listen ist häufig, aber bestehende Lösungen scheitern oft daran verschachtelte Strukturen. Insbesondere eine Liste wie [[[1, 2, 3], [4, 5]], 6] kann mit den meisten Lösungen nicht reduziert werden.

Die folgende Funktion, basierend auf einer Lösung aus einer anderen Frage, kann solche Listen effektiv reduzieren:

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

Obwohl diese Funktion funktioniert, kann sie mithilfe des Generators in Bezug auf Lesbarkeit und Leistung verbessert werden Funktionen.

Python 2 mit iterierbarem 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 mit iterierbarem ABC und Yield From

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

Diese generatorbasierten Lösungen bieten eine präzisere und effizientere Möglichkeit, unregelmäßige Listen zu reduzieren. Sie funktionieren, indem sie jedes Element in der Liste durchlaufen und rekursiv Elemente für Unterlisten ergeben. Alle nicht iterierbaren Elemente (z. B. Zahlen oder Zeichenfolgen) werden sofort zurückgegeben.

Das obige ist der detaillierte Inhalt vonWie können Python-Generatoren beliebig verschachtelte Listen effizient reduzieren?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage