Erklärung zur Lektion
Nach dieser Lektion kannst du:
zip() paaren, ohne sie manuell zu indizieren.zip() bei der kürzesten Eingabe stoppt und was das für fehlende Daten bedeutet.enumerate() und zip() kombinieren, um gepaarte Datensätze zu nummerieren.Manchmal erhält ein Programm zusammengehörige Daten in parallelen Sequenzen: Eine enthält Namen und eine andere in derselben Reihenfolge Werte. zip() paart sie nach Position. Jedes Paar lässt sich direkt in einer for-Schleife entpacken.
for item, value in zip(items, values):
...Wichtig: Das gewöhnliche zip() stoppt, wenn seine kürzeste Eingabe erschöpft ist. Es erfindet keine Platzhalterwerte für fehlende Einträge. Wenn die Längen exakt übereinstimmen müssen, prüfe sie vor dem Paaren separat; andernfalls werden überzählige Werte ignoriert.
Du kennst enumerate() bereits zum Nummerieren von Werten. Setze es um zip() herum, wenn du eine bei 1 beginnende Anzeigenummer und beide Werte brauchst. Dank des Tupel-Entpackens von Python kann die Schleife alle drei sauber erhalten.
Bei aufeinander abgestimmten, eindeutigen Schlüsseln erzeugt dict(zip(keys, values)) ebenfalls eine Nachschlagetabelle. Achtung: Doppelte Schlüssel werden vom zuletzt gepaarten Wert überschrieben.
zones = ["west", "east"]
replicas = [2, 4]
for zone, count in zip(zones, replicas):
print(f"{zone}: {count} replicas")Ausgabe:
west: 2 replicas
east: 4 replicasJeder Schleifenschritt liefert dir ein aufeinander abgestimmtes Paar.
teams = ["alpha", "beta", "gamma"]
regions = ["eu", "us"]
print(list(zip(teams, regions)))Ausgabe:
[('alpha', 'eu'), ('beta', 'us')]gamma wird nicht gepaart: Es gibt keine dritte Region.
services = ["cache", "api"]
ports = [6379, 8080]
for number, (service, port) in enumerate(zip(services, ports), start=1):
print(f"{number}. {service} uses {port}")Ausgabe:
1. cache uses 6379
2. api uses 8080Die Klammern um (service, port) entpacken das Paar innerhalb des nummerierten Elements.
features = ["search", "export"]
limits = [20, 5]
lookup = dict(zip(features, limits))
print(lookup)Ausgabe:
{'search': 20, 'export': 5}Bei doppelten Feature-Namen würde das spätere gepaarte Limit das frühere ersetzen.
| Ziel | Muster |
|---|---|
| Aufeinander abgestimmte Werte paaren | zip(first, second) |
| Über Paare iterieren | for left, right in zip(...): |
| Gepaarte Werte nummerieren | enumerate(zip(...), start=1) |
| Ein Dictionary aufbauen | dict(zip(keys, values)) |
| Stillschweigend fehlende Daten vermeiden | Bei Bedarf die Längen prüfen, bevor du zip() verwendest |
zip() ist kein vollständiger Outer Join: Es stoppt bei der kürzesten Eingabe.enumerate(zip(...)) erzeugt eine Nummer und ein Paar; entpacke beide Ebenen korrekt.