Als ich anfing, in Python zu programmieren, habe ich für alles in der Listenverarbeitung Schleifen verwendet.
Müssen Sie die Anzahl in einer Liste verdoppeln? Schreibe eine for-Schleife. Müssen Sie einige Elemente filtern? Noch eine for-Schleife.
Es hat funktioniert, aber es war nicht der beste Weg.
Hier möchte ich die andere Seite der Medaille zeigen – wie sie sich wiederholende Schleifen durch einfache Listenoperationen ersetzen können, wodurch Ihr Code sauberer und schneller wird.
Lassen Sie mich Ihnen erklären, warum Schleifen oft nicht jedes Mal die beste Wahl für Listenoperationen sind und wie Sie Ihre Python-Kenntnisse mit intelligenteren Alternativen aufwerten können.
Das Problem mit Schleifen
Beginnen wir mit einem einfachen Beispiel.
Angenommen, Sie haben eine Liste mit Zahlen und möchten eine neue Liste erstellen, in der jede Zahl verdoppelt wird.
So würden es viele von uns tun:
numbers = [1, 2, 3, 4, 5]
doubled = []
for num in numbers:
doubled.append(num * 2)
print(doubled) # Output: [2, 4, 6, 8, 10]
Das funktioniert, ist aber wortreich. Sie müssen:
- Erstellen Sie eine leere Liste doubled().
- Schreibe eine Schleife, um jede Zahl durchzugehen.
- Fügen Sie das Ergebnis an die neue Liste an.
Für kleine Skripts ist es in Ordnung, aber wenn Ihr Code wächst, kann dieser Ansatz dazu führen, dass Ihre Programme schwieriger zu lesen und zu warten sind.
Geben Sie Listenverständnisse ein
Das Verständnis von Listen zeichnet sich dadurch aus, dass die Logik einfach ist – wie das Transformieren oder Filtern einer Liste in einem einzigen, übersichtlichen Schritt.
Sie sind prägnant, lesbar und sehr pythonisch für diese Art von Operationen.
Aber wie ich bereits erwähnt habe, ist es wichtig, sie in Situationen mit verschachtelten Schleifen oder komplexen Bedingungen nicht übermäßig zu verwenden.
Mit einer Zeile können Sie das gleiche Ergebnis wie mit der obigen Schleife erzielen:
numbers = [1, 2, 3, 4, 5]
doubled = [num * 2 for num in numbers]
print(doubled) # Output: [2, 4, 6, 8, 10]
Warum ist das besser?
- Es ist prägnant: Alles passiert in einer Zeile.
- Es ist lesbar: Sie können auf einen Blick verstehen, was passiert.
- It’s Pythonic: List Comprehensions wurde entwickelt, um Ihren Code sauberer und schneller zu machen.
Filtern mit Listenverständnis
Nehmen wir an, Sie möchten nur die geraden Zahlen aus der Liste verwenden. Anstatt eine Schleife mit einer if-Anweisung zu schreiben, verwenden Sie Folgendes:
numbers = [1, 2, 3, 4, 5]
evens = [num for num in numbers if num % 2 == 0]
print(evens) # Output: [2, 4]
Sehen Sie, wie natürlich das aussieht?
Sie können Bedingungen direkt in das Verständnis einfügen.
Wie sieht es mit der map()-Funktion aus?
Wenn Sie einen funktionalen Programmierstil bevorzugen, ist die map() Funktion von Python ein weiteres leistungsstarkes Werkzeug.
So können Sie die Zahlen verdoppeln:
numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda num: num * 2, numbers))
print(doubled) # Output: [2, 4, 6, 8, 10]
Die map()-Funktion wendet eine bestimmte Funktion (in diesem Fall die lambda num: num * 2
) auf jedes Element in der Liste an.
Vorteile von map()
- Es geht schnell: Die Funktion wird direkt angewendet, ohne explizit zu iterieren.
- Es ist wiederverwendbar: Sie können benutzerdefinierte Funktionen definieren und mit map() wiederverwenden.
Nachteile von map()
- Es ist nicht so intuitiv wie das Listenverständnis für Anfänger.
- Es ist schwieriger zu lesen, wenn Sie nicht an funktionale Programmierung gewöhnt sind.
Wann Schleifen noch Sinn machen
Um es klar zu sagen: Schleifen sind in der Listenverarbeitung nicht böse. Sie sind immer noch die beste Wahl, wenn:
- Sie müssen komplexe Vorgänge ausführen, die nicht in eine einzelne Zeile passen.
- Sie arbeiten mit verschachtelten Datenstrukturen, bei denen es auf die Lesbarkeit ankommt.
Zum Beispiel können Listenverständnisse schwer zu lesen sein, wenn sie zu lang oder verschachtelt sind:
# Hard to read
matrix = [[j for j in range(3)] for i in range(3)]
In solchen Fällen können Schleifen eine bessere Option sein:
matrix = []
for i in range(3):
row = []
for j in range(3):
row.append(j)
matrix.append(row)
Fazit
Schleifen sind ein guter Ausgangspunkt, aber sie sind nicht immer bei der Listenverarbeitung die beste Lösung. Wenn Sie saubereren, schnelleren und mehr Python-Code schreiben möchten, ist es an der Zeit, das Listenverständnis und map()
.
Sie sparen Ihnen Zeit, reduzieren Unordnung und machen Ihre Programme effizienter.
Wenn Sie sich also das nächste Mal dabei erwischen, wie Sie nach einer Schleife greifen, fragen Sie sich: „Kann ich das mit einem Listenverständnis machen oder mit map() stattdessen?“
Die Chancen stehen gut, dass die Antwort ja ist!
Weiterer lesenswerter Beitrag: Zukunft der Frontend-Entwicklung: Trends für 2025