So reduzieren Sie eine Liste von Listen in Python
Erfahren Sie, wie Sie eine Liste von Listen in Python reduzieren. Vergleichen Sie verschachtelte Listenverständnisse, itertools.chain, sum und rekursive Methoden mit Codebeispielen.
Übersicht
Wenn Sie mit Matrixberechnungen, Datenbankzeilen oder analysierten Datenbäumen arbeiten, werden Sie häufig auf verschachtelte Strukturen stoßen, z. B. eine Liste von Listen: „[[1, 2], [3, 4]]“. Diese Struktur zu verflachen bedeutet, sie in eine eindimensionale Liste umzuwandeln, die alle einzelnen Elemente enthält: „[1, 2, 3, 4]“. Python bietet mehrere elegante Möglichkeiten, dies zu erreichen.
Die gebräuchlichste und pythonischste Methode zum Reduzieren einer Liste von Listen ist die Verwendung eines verschachtelten Listenverständnisses: „[Element für Unterliste in Matrix für Element in Unterliste]“. Während die Syntax auf den ersten Blick etwas kontraintuitiv erscheinen kann, da die Schleifen in der gleichen Reihenfolge wie eine verschachtelte „for“-Schleife geschrieben werden, ist sie hochoptimiert, schnell und erfordert keinen Import externer Bibliotheken.
Alternativ können Sie die Funktion „chain.from_iterable()“ des Moduls „itertools“ verwenden. Dies ist der speichereffizienteste Ansatz, da er einen Iterator zurückgibt, der Elemente langsam liefert, anstatt sofort eine neue Liste im Speicher zuzuweisen. Für tief verschachtelte Listen (mit beliebiger Tiefe) müssen Sie eine rekursive Generatorfunktion schreiben, um alle Ebenen zu entpacken.
Code- und Ausführungsausgabe
Dieses Skript demonstriert das Reduzieren einer Liste von Listen mithilfe von Listenverständnis, itertools.chain und rekursivem Entpacken.
import itertools
matrix = [[1, 2, 3], [4, 5], [6, 7, 8]]
# Method 1: List comprehension (Pythonic and fast)
flat_comp = [item for sublist in matrix for item in sublist]
print("List comprehension:", flat_comp)
# Method 2: itertools.chain (Highly memory efficient)
flat_chain = list(itertools.chain.from_iterable(matrix))
print("itertools.chain:", flat_chain)
# Method 3: Recursive function for deep/irregular nesting
irregular = [1, [2, 3], [[4, 5], 6]]
def flatten_deep(items):
result = []
for item in items:
if isinstance(item, list):
result.extend(flatten_deep(item))
else:
result.append(item)
return result
print("Deep flatten:", flatten_deep(irregular))List comprehension: [1, 2, 3, 4, 5, 6, 7, 8]
itertools.chain: [1, 2, 3, 4, 5, 6, 7, 8]
Deep flatten: [1, 2, 3, 4, 5, 6]Schrittweise Umsetzung
- Verwenden Sie ein verschachteltes Listenverständnis [Element für Unterliste in verschachtelter_Liste für Element in Unterliste] für flache 2D-Strukturen.
- Importieren Sie itertools und rufen Sie itertools.chain.from_iterable(nested_list) für eine verzögerte, speicherfreundliche Auswertung auf.
- Definieren Sie eine rekursive Funktion, die isinstance(item, list) überprüft, um beliebig verschachtelte Sammlungen zu verarbeiten.
Häufig gestellte Fragen
Kann ich die Funktion sum() verwenden, um Listen zu reduzieren?
Ja, sum(matrix, []) wird funktionieren, aber davon wird dringend abgeraten. Es wird mit der Komplexität O(N^2) ausgeführt, da bei jedem Hinzufügen eine neue Listenkopie erstellt wird, was bei großen Datensätzen zu einer schlechten Leistung führt.
Was ist die schnellste Methode, Listenlisten zu reduzieren?
itertools.chain.from_iterable() ist normalerweise am schnellsten, dicht gefolgt von verschachtelten Listenverständnissen.
Verwandte Themen
Erfahren Sie, wie Sie Listenverständnisse in Python verwenden. Schreiben Sie prägnante Schleifen, wenden Sie bedingte Filter an und erstellen Sie Matrizen mit klarer visueller Syntax.
So teilen Sie eine Liste in Python aufErfahren Sie, wie Sie Listen in Python mithilfe der leistungsstarken Klammersyntax aufteilen. Master-Start-, Stopp- und Schrittargumente, negative Indizierung und Umkehrlisten.
Empfohlene Python-Ressourcen
Erweitern Sie Ihr Wissen mit zugehörigen interaktiven Tutorials, Spickzetteln und Codevergleichen.
Python-Variablen und Datentypen erklärt
Verstehen Sie Python-Variablen und Kerndatentypen (Strings, Ganzzahlen, Gleitkommazahlen, Boolesche Werte). Eine vollständige Einsteigeranleitung zur Speicherzuweisung in Python.
Spickzettel für Python-Listenmethoden
Kurzanleitung für Python-Listenoperationen. Meistern Sie das Anhängen, Einfügen, Entfernen, Sortieren und Schneiden von Elementen.
Python vs. JavaScript: Welche Programmiersprache ist die beste?
Ein umfassender Vergleich zwischen Python und JavaScript. Entdecken Sie Syntaxunterschiede, Leistung, Anwendungsfälle (Backend vs. Frontend) und Codierungsbeispiele.