Erklärung zur Lektion
Nach dieser Lektion kannst du:
Pythonischer Code ist nicht Code mit den wenigsten Zeichen. Es ist Code, der seine Absicht mit den Werkzeugen von Python klar vermittelt.
Verwende eine Comprehension, um eine neue Sammlung aufzubauen. Verwende eine normale for-Schleife, wenn dein Ziel ein sichtbarer Nebeneffekt ist, etwa das Ausgeben jeder Zeile, oder wenn sich in einer Iteration mehrere Zustandswerte ändern. Verwende zip() für wirklich aufeinander abgestimmte Sequenzen, enumerate(), wenn die Nummer wichtig ist, und sorted(), um eine neue geordnete Liste zurückzugeben, ohne die Quelle zu verändern.
Ein häufiger Datenfehler entsteht, wenn du zwei aufeinander abgestimmte Listen getrennt filterst: Ihre verbleibenden Positionen passen dann möglicherweise nicht mehr zusammen. Paare zusammengehörige Werte zuerst und filtere dann die kombinierten Datensätze.
Ein verlässlicher Bericht wird meist in klaren Stufen zusammengesetzt: normalisieren → auswählen → umformen → ordnen → berichten. Materialisiere eine Zwischensammlung, wenn du sie zweimal untersuchen musst; verwende andernfalls für eine Aggregation oder Prüfung mit nur einem Durchlauf einen Generatorausdruck.
Für ein Ergebnis zur Einsatzbereitschaft reicht all() allein nicht aus, wenn eine leere Menge von Prüfungen als blockiert gelten muss. Formuliere die fachliche Regel ausdrücklich: Verlange nicht leere Prüfungen und dass jede Prüfung besteht.
raw_regions = [" US ", "eu", " APAC "]
regions = [region.strip().lower() for region in raw_regions]
print(regions)
print(raw_regions[0])Ausgabe:
['us', 'eu', 'apac']
US Die Eingabe bleibt unberührt; die neue Liste enthält die normalisierten Werte.
jobs = ["api", "queue", "mail"]
owners = ["Maya", "Omar", "Lina"]
active_pairs = [(job, owner) for job, owner in zip(jobs, owners) if job != "queue"]
print(active_pairs)Ausgabe:
[('api', 'Maya'), ('mail', 'Lina')]Wenn du die Paare gemeinsam filterst, bleibt erhalten, welcher Besitzer zu welchem Job gehört.
services = ["api", "db"]
for position, service in enumerate(services, start=1):
print(f"{position}. {service}")Ausgabe:
1. api
2. dbEine normale Schleife ist klarer als eine Comprehension, die nur zum Ausgeben verwendet wird.
checks = ["PASS", "pass"]
normalized = [item.strip().lower() for item in checks]
ready = bool(normalized) and all(item == "pass" for item in normalized)
print(f"Ready: {ready}")Ausgabe:
Ready: TrueWäre die Liste der Prüfungen leer, würde die Absicherung bool(normalized) ein versehentliches „bereit“ verhindern.
| Absicht | Lesbare Option |
|---|---|
| Eine neue Sammlung konstruieren | List-/Dict-/Set-Comprehension |
| Mehrere Zähler ausgeben oder aktualisieren | Normale for-Schleife |
| Aufeinander abgestimmte Eingaben kombinieren | zip() vor dem Filtern |
| Nummern für Berichtszeilen erhalten | enumerate(..., start=1) |
| Sortieren, ohne die Quelle zu verändern | sorted(..., key=...) |
| Einmal aggregieren | Generatorausdruck mit sum() / any() / all() |
| Bestätigen, dass ein nicht leerer Stapel bestanden hat | bool(items) and all(...) |
zip().all([]) bedeutet, ein echter Stapel sei geprüft worden.