Wie man eine Liste von Listen in Python abflacht
Emily Parker
Product Engineer · Leapcell

Key Takeaways
- Die Verwendung von List Comprehension oder
itertools.chain()
ist der prägnanteste und effizienteste Ansatz. flatten_recursive()
kann Listen mit beliebigen Verschachtelungstiefen verarbeiten.- Die Wahl der Methode sollte von der Listenstruktur und den Leistungsanforderungen abhängen.
Das Glätten einer Liste von Listen in Python beinhaltet die Umwandlung einer verschachtelten Listenstruktur in eine einzelne, eindimensionale Liste. Dies ist eine gängige Aufgabe beim Umgang mit Daten, die in verschachtelten Listen gespeichert sind, wie z. B. Matrizen oder JSON-Daten. Im Folgenden werden verschiedene Methoden zur Erreichung dieses Ziels vorgestellt, jede mit ihren eigenen Vorteilen.
1. Verwendung einer For-Schleife mit .extend()
Diese Methode beinhaltet das Iterieren durch jede Unterliste und das Erweitern einer neuen Liste mit den Elementen jeder Unterliste.
def flatten_extend(nested_list): flat_list = [] for sublist in nested_list: flat_list.extend(sublist) return flat_list
Dieser Ansatz ist unkompliziert und lesbar, was ihn für Anfänger geeignet macht.
2. Verwendung von List Comprehension
List Comprehension bietet eine prägnante Möglichkeit, eine Liste von Listen zu glätten.
def flatten_comprehension(nested_list): return [item for sublist in nested_list for item in sublist]
Dieser Einzeiler ist effizient und in Pythonic-Codebasen weit verbreitet.
3. Verwendung von itertools.chain()
Das Modul itertools
bietet die Funktion chain()
, die verwendet werden kann, um eine Liste von Listen zu glätten.
import itertools def flatten_chain(nested_list): return list(itertools.chain.from_iterable(nested_list))
Diese Methode ist effizient und eignet sich für große Datensätze, da sie den Overhead verschachtelter Schleifen vermeidet.
4. Verwendung von functools.reduce()
Die Funktion reduce()
aus dem Modul functools
kann Unterlisten zu einer einzigen Liste zusammenfügen.
from functools import reduce from operator import add def flatten_reduce(nested_list): return reduce(add, nested_list, [])
Obwohl dieser Ansatz funktioniert, ist er im Allgemeinen weniger lesbar und wird für einfache Glättungsaufgaben nicht empfohlen.
5. Verwendung von sum()
Die integrierte Funktion sum()
kann auch eine Liste von Listen glätten, indem eine leere Liste als Startwert angegeben wird.
def flatten_sum(nested_list): return sum(nested_list, [])
Diese Methode ist prägnant, kann aber für große Listen weniger effizient sein, da sum()
die Listenverkettung anders handhabt.
6. Verwendung von Rekursion für tief verschachtelte Listen
Für Listen mit beliebigen Verschachtelungstiefen kann ein rekursiver Ansatz verwendet werden.
def flatten_recursive(nested_list): flat_list = [] for item in nested_list: if isinstance(item, list): flat_list.extend(flatten_recursive(item)) else: flat_list.append(item) return flat_list
Diese Methode verarbeitet verschachtelte Listen beliebiger Tiefe, sollte aber mit Vorsicht verwendet werden, um Fehler aufgrund der maximalen Rekursionstiefe zu vermeiden.
7. Verwendung von NumPy für numerische Daten
Wenn Sie mit numerischen Daten arbeiten, bietet NumPy effiziente Methoden zum Glätten von Arrays.
import numpy as np def flatten_numpy(nested_list): return np.array(nested_list).flatten().tolist()
Dieser Ansatz ist hocheffizient für numerische Berechnungen und wird häufig in Data-Science-Anwendungen verwendet.
Fazit
Jede Methode hat ihre eigenen Anwendungsfälle:
- For-Schleife und List Comprehension: Am besten für Lesbarkeit und Einfachheit.
itertools.chain()
: Effizient für große Datensätze.reduce()
undsum()
: Prägnant, können aber Leistungseinbußen haben.- Rekursion: Geeignet für tief verschachtelte Listen.
- NumPy: Ideal für die Verarbeitung numerischer Daten.
Wählen Sie die Methode, die am besten zu Ihren spezifischen Bedürfnissen und der Art Ihrer Daten passt.
FAQs
Verwenden Sie List Comprehension: [item for sublist in nested_list for item in sublist]
.
Nur die rekursive Methode (flatten_recursive
) kann Verschachtelungen beliebiger Tiefe verarbeiten.
Verwenden Sie NumPy, wenn Sie mit numerischen Daten arbeiten, um eine bessere Leistung zu erzielen.
Wir sind Leapcell, Ihre erste Wahl für das Hosting von Python-Projekten.
Leapcell ist die Next-Gen Serverless Platform für Webhosting, Async Tasks und Redis:
Multi-Language Support
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt Projekte kostenlos bereit
- Zahlen Sie nur für die Nutzung – keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 US-Dollar unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeitmetriken und -protokollierung für verwertbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Automatische Skalierung zur einfachen Bewältigung hoher Parallelität.
- Kein Betriebsaufwand – konzentrieren Sie sich einfach auf das Bauen.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ