Was sind List Comprehensions?
List comprehension ist eine kompakte Möglichkeit, eine neue Liste basierend auf einer vorhandenen Sequenz oder einem iterierbaren Objekt zu erstellen. Anstatt mehrere Zeilen mit Schleifen zu schreiben, können Sie dieselbe Logik in einer Zeile ausdrücken.
Grundlegende Syntax
Die Grundstruktur von list comprehension sieht so aus:
новый_список = [выражение for элемент in последовательность]Beispiel: traditioneller Ansatz vs. Listenverständnis
Erstellen wir eine Liste von Quadraten von Zahlen von 0 bis 9.
Traditioneller Ansatz:
squares = []
for i in range(10):
squares.append(i ** 2)
print(squares)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]Mit list comprehension:
squares = [i ** 2 for i in range(10)]
print(squares)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]Das Ergebnis ist das gleiche, aber die zweite Option ist kürzer und liest sich fast wie ein normaler Satz: "Erstelle eine Liste der Quadrate i für jedes i im Bereich von 0 bis 9".

Wir fügen Bedingungen hinzu
Sie können Elemente filtern, indem Sie am Ende eine Bedingung hinzufügen:
новый_список = [выражение for элемент in последовательность if условие]Beispiele mit Bedingungen
Nur gerade Zahlen:
evens = [i for i in range(20) if i % 2 == 0]
print(evens)
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]Quadrate von nur ungeraden Zahlen:
odd_squares = [i ** 2 for i in range(10) if i % 2 != 0]
print(odd_squares)
# [1, 9, 25, 49, 81]Zeilenfilterung:
words = ["apple", "banana", "cherry", "date", "elderberry"]
long_words = [word for word in words if len(word) > 5]
print(long_words)
# ['banana', 'cherry', 'elderberry']Arbeiten mit Zeilen
List comprehensions eignen sich hervorragend für die Verarbeitung von Zeichenfolgen.
Umwandlung in Großbuchstaben:
names = ["anna", "bob", "charlie"]
upper_names = [name.upper() for name in names]
print(upper_names)
# ['ANNA', 'BOB', 'CHARLIE']Extraktion der Anfangsbuchstaben:
words = ["Python", "is", "awesome"]
first_letters = [word[0] for word in words]
print(first_letters)
# ['P', 'i', 'a']Verschachtelte Schleifen
List Comprehensions unterstützen verschachtelte Schleifen für die Arbeit mit mehrdimensionalen Daten.
Erstellen von Koordinatenpaaren:
coordinates = [(x, y) for x in range(3) for y in range(3)]
print(coordinates)
# [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]Multiplikation von Elementen aus zwei Listen:
list1 = [1, 2, 3]
list2 = [10, 20, 30]
products = [x * y for x in list1 for y in list2]
print(products)
# [10, 20, 30, 20, 40, 60, 30, 60, 90]
Bedingter if-else-Operator
Sie können den ternären Operator für komplexere Logik verwenden:
новый_список = [выражение_if if условие else выражение_else for элемент in последовательность]Beispiel: Gerade ersetzen wir durch "gerade", ungerade lassen wir so wie sie sind:
numbers = [1, 2, 3, 4, 5, 6]
result = ["even" if n % 2 == 0 else n for n in numbers]
print(result)
# [1, 'gerade', 3, 'gerade', 5, 'gerade']Praktische Beispiele
Arbeiten mit Wörterbüchern
Extraktion von Werten:
prices = {"apple": 50, "banana": 30, "cherry": 80}
expensive = [fruit for fruit, price in prices.items() if price > 40]
print(expensive)
# ['apple', 'cherry']Dateiverarbeitung
Zeilen lesen und filtern:
# Angenommen, wir haben eine Textdatei
lines = [" hello ", "world", " Python ", ""]
cleaned = [line.strip() for line in lines if line.strip()]
print(cleaned)
# ['hello', 'world', 'Python']Mathematische Operationen
Anwendung der Funktion auf alle Elemente:
import math
numbers = [4, 9, 16, 25]
roots = [math.sqrt(n) for n in numbers]
print(roots)
# [2.0, 3.0, 4.0, 5.0]Wann man keine List Comprehensions verwenden sollte
Trotz der Eleganz gibt es Situationen, in denen traditionelle Zyklen vorzuziehen sind:
Komplexe Logik: wenn der Ausdruck zu lang und schwer zu lesen wird
Nebenwirkungen: list comprehensions sind zum Erstellen von Listen gedacht, nicht zum Ausführen von Aktionen
Tiefe Verschachtelung: mehr als zwei verschachtelte Schleifen machen den Code unlesbar
Schlechtes Beispiel (zu kompliziert):
# Tu das nicht!
result = [x * y if x % 2 == 0 else x + y for x in range(10) if x > 5 for y in range(10) if y % 3 == 0]Es ist besser, es in mehrere Zeilen mit normalen Schleifen aufzuteilen.
Andere Arten von Verständnis
Python unterstützt nicht nur list comprehensions:
Dictionary comprehension:
squares_dict = {x: x ** 2 for x in range(5)}
print(squares_dict)
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}Set comprehension:
unique_squares = {x ** 2 for x in [1, 2, 2, 3, 3, 4]}
print(unique_squares)
# {1, 4, 9, 16}Generatorausdruck (um Speicher zu sparen):
squares_gen = (x ** 2 for x in range(1000000))
# Erstellt einen Generator, keine Liste, und spart SpeicherplatzProduktivität
List comprehensions arbeiten normalerweise schneller als äquivalente Schleifen mit append(), da sie auf der Ebene des Python-Interpreters optimiert sind.
Befund
List Comprehensions sind ein leistungsstarkes Werkzeug, das Ihren Python-Code eleganter und lesbarer macht. Beginnen Sie mit einfachen Beispielen, üben Sie an realen Aufgaben, und mit der Zeit werden Sie sie natürlich und effektiv einsetzen.
Wichtige Punkte, die man sich merken sollte:
List Comprehensions machen den Code kürzer und ausdrucksstärker
Sie können Bedingungen für die Filterung hinzufügen
Unterstützt verschachtelte Schleifen
Vermeiden Sie Komplexität – Lesbarkeit ist wichtiger als Kürze
Es gibt auch dict, set comprehensions und generator expressions
Üben Sie, experimentieren Sie und list comprehensions werden ein natürlicher Teil Ihres Python-Programmierstils!
Schließen Sie sich an Kodik — unsere Lern-App für Entwickler! Wir haben freundliche Community im Telegram-Kanal, wo Anfänger und erfahrene Programmierer ihr Wissen teilen, sich gegenseitig bei Aufgaben helfen und neue Technologien diskutieren. Lernen Sie mit uns!
