Python: for Schleifen

Python
Autor:in

Johannes Kaisinger

Veröffentlichungsdatum

21. Oktober 2021

for Schleifen werden sehr oft benötigt um Aufgaben sequentiell abzuarbeiten. In Python gibt es einige Muster die zusammen mit der for Schleife immer wieder anzutreffen sind. Das Kombinieren der for Schleife mit den Funktionen range(), enumerate() und zip() erzeugt sehr lesbare Code-Muster.

Tipp

InnCybernetics bietet ein offenes Python Buch unter python.inncybernetics.com. Weiters bietet InnCybernetics Seminare/Trainings auf Basis von Python an: - https://www.inncybernetics.com/seminare/seminare.html.

for Schleifen

for Schleifen sind in fast allen Programmiersprachen vorhanden. Eine for Schleife in C sieht wie folgt aus.

// print numbers from 0 to 5
int i;

  for (i = 0; i < 6; ++i)
  {
    printf("%d ", i);
  }

Eine einfache for Schleife in Python wird mit dem in Operator und der Funktion range() konstruiert.

# for loop from 0 to b-1
for i in range(6):
    print(i)
0
1
2
3
4
5

Die Schleife kann von einem Startwert verschieden von 0 starten.

# for loop from a to b-1
for i in range(1,6):
    print(i)
1
2
3
4
5

Es besteht die Möglichkeit eine Schrittweite verschieden von 1 zu definieren.

# for loop from a to b-1 by step c
for i in range(1,6,2):
    print(i)
1
3
5

for Schleifen mit Listen

In Python sind Listen sehr hilfreich und oft anzutreffen.

l_numbers = ["Eins", "Zwei", "Drei"]

Über Listen kann sehr leicht iteriert werden. Dazu benützen wir wiederum den in Operator.

# good pattern
print("List iteration:\n")
for numbers in l_numbers:
    print("Element:",numbers)
List iteration:

Element: Eins
Element: Zwei
Element: Drei

Oft wollen wir aber nicht nur über die Elemente iterieren, sondern auch den Elementindex erhalten. Python bietet mit enumerate() eine sehr elegante Möglichkeit.

# good pattern
print("List iteration with enumerate:\n")
for i, ele in enumerate(l_numbers):
    print("Index:", i, "Element:", ele)
List iteration with enumerate:

Index: 0 Element: Eins
Index: 1 Element: Zwei
Index: 2 Element: Drei

Wir könnnen den Index mit einem zusätzlichen Parameter steuern.

# good pattern
print("List iteration with enumerate:\n")
for i, ele in enumerate(l_numbers, 100):
    print("Index:", i, "Element:", ele)
List iteration with enumerate:

Index: 100 Element: Eins
Index: 101 Element: Zwei
Index: 102 Element: Drei

Gerade Ein- und Umsteigern verwenden oft das folgende Muster, welches jedoch vermieden werden sollte.

# bad pattern
print("List iteration => Don't do that:\n")
for i in range(len(l_numbers)):
    print("Index:",i ,"Element:", l_numbers[i])
List iteration => Don't do that:

Index: 0 Element: Eins
Index: 1 Element: Zwei
Index: 2 Element: Drei
for i in range(len(list_)):
    print(i, list_[i])

Diese Art einer for-Schleife funktioniert, wird aber nicht als schöner Python-Code aufgefasst. Wir sollten wenn möglich stattdessen das Muster mit enumerate() verwenden.

for Schleifen mit zip()

Die zip() Funktion können wir gemeinsam mit der for Schleife verwenden.

list1 = [1, 2, 3]
list2 = ["a", "b", "c"]
list3 = ["A", "B", "C"]
type(zip(list1,list2))
zip

Die zip() Funktion gibt ein Zip-Objekt zurück, welches ein Iterator von Tupeln ist. Wie üblich können wir auf Iteratoren die next() Funktion anwenden, welche uns das nächste Element liefert.

z = zip(list1,list2)
print(next(z))
print(next(z))
print(next(z))
(1, 'a')
(2, 'b')
(3, 'c')

Wir wollen nun zwei Listen kombinieren und mit Hilfe einer for Schleife durchiterieren.

for e in zip(list1,list2):
    print(e)
(1, 'a')
(2, 'b')
(3, 'c')

Auch mit drei Listen funktioniert dieses Vorgehen.

for e in zip(list1,list2,list3):
    print(e)
(1, 'a', 'A')
(2, 'b', 'B')
(3, 'c', 'C')

Fazit

Die for Schleife in Python kommt oft mit zusätzlichen Funktionen, wie range(), enumerate() und zip() zum Einsatz. Viele Probleme können mit den oben gezeigten Mustern elegant gelöst werden.