Glätten eines unregelmäßigen Liste von Listen

Ja, ich weiß, dieses Thema wurde abgedeckt, bevor (hier, hier, hier, hier), aber soweit ich weiß, alle Lösungen, bis auf eine, nicht auf eine Liste wie diese:

L = [[[1, 2, 3], [4, 5]], 6]

Wo die gewünschte Ausgabe

[1, 2, 3, 4, 5, 6]

Oder vielleicht noch besser, einen iterator. Die einzige Lösung, die ich sah, das funktioniert für eine beliebige Schachtelung ist gefunden in dieser Frage:

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

flatten(L)

Ist dieses Modell das beste ist? Hab ich was übersehen? Irgendwelche Probleme?

Die Tatsache, dass es so viele Antworten und so viel Aktion auf diese Frage wirklich vermuten, dass dies eine eingebaute Funktion, irgendwo, richtig? Es ist vor allem schade, dass der compiler.ast wurde entfernt von Python 3.0
Ich würde sagen, dass das, was Python wirklich braucht, ist ungebrochen Rekursion, anstatt ein weiteres builtin.
völlig einverstanden, ist die Tatsache, dass Menschen, die mit offensichtlich schlechten APIs/übermäßig komplizierte Datenstrukturen (nur eine Anmerkung: lists soll homogen sein) bedeutet nicht, dass es eine Python ist Schuld und wir müssen ein builtin für eine solche Aufgabe

InformationsquelleAutor telliott99 | 2010-01-28

Schreibe einen Kommentar