Direkt zum Hauptinhalt springen
eLearner.app
Modul 6 · Lektion 4 von 424/36 im Kurs~12 min
Lektionen des Moduls (4/4)

Wichtige itertools

Python stellt eine Vielzahl von Iterationswerkzeugen zur Verfügung: Einige sind eingebaut (immer verfügbar), andere befinden sich im Modul itertools der Standardbibliothek. Hier sind die wichtigsten.

enumerate: Index + Wert

Wenn du während einer Schleife sowohl den Index als auch das Element benötigst:

Python
for i, parola in enumerate(["a", "b", "c"]):
    print(i, parola)
# 0 a
# 1 b
# 2 c

# Start bei einer anderen Zahl:
for i, parola in enumerate(["a", "b", "c"], start=1):
    print(i, parola)

zip: Parallel iterieren

Kombiniert mehrere Iterables Element für Element:

Python
nomi = ["Ada", "Linus", "Grace"]
eta = [36, 54, 85]

for n, e in zip(nomi, eta):
    print(f"{n} ha {e} anni")

zip stoppt beim kürzesten Iterable. Verwende für ein "langes" zip itertools.zip_longest.

Erstellen eines Dictionaries aus zwei parallelen Listen:

Python
dict(zip(nomi, eta))
# {'Ada': 36, 'Linus': 54, 'Grace': 85}

itertools.chain: Iterables verketten

Python
from itertools import chain
list(chain([1, 2], [3, 4], [5]))
# [1, 2, 3, 4, 5]

Ohne eine Zwischenliste zu erstellen: nützlich für Dateien, Generatoren usw.

itertools.count und repeat: Unendliche Iteratoren

Python
from itertools import count, repeat

# count(start, step) — unendlich wachsende Ganzzahlen
for i in count(10, 2):
    if i > 20: break
    print(i)
# 10, 12, 14, 16, 18, 20

# repeat(x, n) — wiederholt denselben Wert n-mal (oder unendlich ohne n)
list(repeat("ok", 3))   # ['ok', 'ok', 'ok']

itertools.combinations

Alle Kombinationen (ohne Wiederholungen, reihenfolgeunabhängig) einer bestimmten Länge:

Python
from itertools import combinations
list(combinations([1, 2, 3, 4], 2))
# [(1,2), (1,3), (1,4), (2,3), (2,4), (3,4)]

Geordnete Variante: permutations. Varianten mit Wiederholung: combinations_with_replacement und product.

zip() für Dictionaries und unausgeglichene Iterables

Die Funktion zip() stoppt, sobald das kürzeste Eingabe-Iterable erschöpft ist. Wenn du Elemente paaren und überschüssige Werte behalten möchtest (indem du sie mit einem Standardwert wie None auffüllst), kannst du zip_longest() aus dem Modul itertools verwenden. Zudem kannst du das Ergebnis eines zip-Aufrufs direkt an dict() übergeben, um sofort eine Schlüssel-Wert-Zuordnung zu erstellen.

Probiere es aus

Übung#python.m6.l4.e1
Versuche: 0Wird geladen…

Gegeben seien die parallelen Listen `countries = ['Italia', 'Francia', 'Spagna']` und `capitals = ['Roma', 'Parigi', 'Madrid']`. Erstelle `mapping` als ein Dictionary {country: capital}. Evaluiere `mapping`.

Editor wird geladen…
Hinweis anzeigen

dict(zip(countries, capitals))

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#python.m6.l4.e2
Versuche: 0Wird geladen…

Gegeben sei `words = ['ciao', 'mondo', 'python']`. Erstelle `enumerated_items` als eine Liste von Tupeln (i, word), beginnend bei i=1. Evaluiere `enumerated_items`.

Editor wird geladen…
Hinweis anzeigen

enumerate(words, start=1) → (i, Wert)-Tupel.

Lösung nach 3 Versuchen verfügbar

Zusätzliche Herausforderung

Übung#python.m6.l4.e3
Versuche: 0Wird geladen…

Gegeben seien zwei Listen `keys = ['a', 'b', 'c']` und `values = [10, 20, 30]`. Verwende `zip`, um sie paarweise zu verbinden, und konvertiere das Ergebnis in ein Dictionary. Speichere das Dictionary in `my_dict` und evaluiere es.

Editor wird geladen…
Hinweis anzeigen

Verwende dict(zip(keys, values)) und weise es my_dict zu.

Lösung nach 3 Versuchen verfügbar