Vorlesungsskript 25
Iterieren wie ein Boss
Im letzten Vorlesungsskript haben Sie gelernt, wie Sie mit Hilfe von Generator-Funktionen und Comprehensions elegant Python-Ausdrücke schreiben können, die Iterables zurückgeben. In diesem Skript werden drei nützliche Funktionen und Methoden vorgestellt, die Python bereits enthält und die ebenfalls Iterables zurückgeben.
Iterieren über Dictionarys: items
Oft muss man über ein Dictionary iterieren und dabei sowohl auf die Schlüssel als auch auf die zugehörigen Werte zugreifen. Erinnern wir uns zum Beispiel an das Ausgeben eines Dictionarys, das als Schlüssel Wörter enthält und als Werte die Häufigkeiten dieser Wörter in einem Text:
for word in frequencies:
print('Das Wort "{}" kommt {}-mal vor.'.format(word, frequencies[word])
Dictionarys haben die Methode items
, die den
Inhalt des Dictionarys als ein Iterable zurückgeben, wobei jedes Element ein
Tupel (key, value)
ist – immer ein Schlüssel zusammen
mit dem zugeordneten Wert. So erhalten wir beides auf einmal und können obige
Schleife noch etwas eleganter schreiben:
for word, frequency in frequencies.items():
print('Das Wort "{}" kommt {}-mal vor.'.format(word, frequency))
Iterieren mit Index: enumerate
Beim Iterieren über Listen mussten wir uns bisher entscheiden: Iterieren wir
über die Indizes (0, 1, 2…) oder über die Elemente? Mit der eingebauten
Funktion enumerate
können wir beides haben: Sie nimmt
ein Input-Iterable und gibt ein Output-Iterable zurück, dessen Elemente nicht
einfach die Elemente des Input-Iterables sind, sondern Tupel (index, element)
, wobei element
ein Element des Input-Iterable ist und index
eine
laufende Nummer. Zum Beispiel:
>>> for i, word in enumerate(['Google', 'bought', 'YouTube']):
... print('Word #{}: {}'.format(i, word))
...
Word #0: Google
Word #1: bought
Word #2: YouTube
Iterieren über mehrere Iterables hintereinander: itertools.chain
Die Funktion chain
im Modul itertools
erlaubt es, mit einer einzigen for
-Schleife (oder Comprehension)
über mehrere Iterables hintereinander zu iterieren, ohne ineffizienterweise eine
große Liste mit allen Elementen machen zu müssen. Zum Beispiel:
>>> import itertools
>>> a = [2, 3, 5]
>>> b = [7, 11]
>>> for number in itertools.chain(a, b):
... print(number)
...
2
3
5
7
11
Weiterführende Lektüre
- Das Module
itertools
enthält viele weitere nützliche Funktionen zum Arbeiten mit Iterables.