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
Die Frage wirft jedoch auch die Möglichkeit alternativer Ansätze unter Verwendung von Generatorfunktionen auf.
Generatorbasierte Funktionen können den Abflachungsprozess vereinfachen und möglicherweise die Leistung verbessern. Hier sind Beispiele für Python 2 und 3:
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
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
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!