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
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
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
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!