Heim >Backend-Entwicklung >Python-Tutorial >Wie kann man unregelmäßig verschachtelte Listen in Python effizient reduzieren?

Wie kann man unregelmäßig verschachtelte Listen in Python effizient reduzieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-30 18:38:20576Durchsuche

How to Efficiently Flatten Irregularly Nested Lists in Python?

So reduzieren Sie eine unregelmäßig verschachtelte Liste von Listen

Obwohl es Diskussionen über die Reduzierung von Listenstrukturen gibt, bleiben die Lösungen bei solchen Listen tendenziell unzureichend tief verschachtelt. Ein effektiver Ansatz wird unten vorgestellt:

Rekursiver Funktionsansatz

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

Diese Funktion prüft, ob jedes Element iterierbar ist (außer Strings) und reduziert es rekursiv, wenn dies zutrifft . An das Ergebnis werden nicht iterierbare Elemente angehängt.

Generatorfunktionsansatz

Eine Verbesserung der Lesbarkeit und Leistung des Abflachungsprozesses ist mithilfe von Generatorfunktionen möglich:

Python 2 (mit 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 (mit Tupel für str und 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

Diese Generatorfunktion gibt die abgeflachten Elemente träge zurück und optimiert so die Speichernutzung . Es kann je nach Bedarf wiederholt oder in eine Liste konvertiert werden.

Das obige ist der detaillierte Inhalt vonWie kann man unregelmäßig verschachtelte Listen in Python effizient reduzieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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