Python For-Schleife gibt jeden Buchstaben des Strings einzeln aus?
Hallo,
ich befasse mich gerade mit Python und frage mich warum Python im folgenden Beispiel jeden Buchstaben des Strings einzeln bzw. untereinander, als scheinbar einen Durchlauf ausgibt und im darauffolgenden Beispiel nicht, ich kann mir das nicht erklären und es ergibt für mich auch irgendwie logisch gar keinen Sinn:
1.Beispiel:
Geburtstagsliste = ('Alex')
for i in Geburtstagsliste:
print (i)
Output:
A
l
e
x
2.Beispiel:
GeburtstagsListe = ('Axel', 'Elke', 'Martin')
for i in GeburtstagsListe:
print(i)
Output:
Axel
Elke
Martin
Danke für jede Hilfe!
5 Antworten
Weil eine for-Schleife in Python immer durch Tupel iteriert. Im ersten Beispiel haben wir einen String, dessen einzelne Elemente die Chars - also die einzelnen Buchstaben - sind. Im zweiten Beispiel ist es eine Liste, von der die Strings die einzelnen Elemente sind, es wird also durch die Namen iteriert...
Vermutlich weil im ersten Beispiel Alex als String interpretiert wird und der Loop durch die Chars iteriert, also die Buchstaben. Im zweiten Beispiel werden Alex, Elke usw. als Array/Liste interpretiert und der Loop iteriert durch die List Items.
Python ist keine expressive Sprache, da erkennt man sowas nicht auf den ersten Blick. In anderen Sprachen kann oder muss man die Variablentypen angeben, da wäre ersichtlich was passiert.
Das Verhalten ist genau so dokumentiert:
https://docs.python.org/3/library/stdtypes.html#tuples
Tuples may be constructed in a number of ways:
- Using a pair of parentheses to denote the empty tuple: ()
- Using a trailing comma for a singleton tuple: a, or (a,)
..
Und ein paar Sätze weiter:
Note that it is actually the comma which makes a tuple, not the parentheses.
In Python ist for ansich ein foreach, es iteriert über die Elemente eines iterables.
Ein String ist iterable, sodaß die Elemente die Einzelbuchstaben sind (Beipsiel 1), ebenso ist ein Tupel ein iterable, sodaß in Beispiel 2 über die Komponenten des Tupels iteriert wird, die ihrerseits Strings sind.
Nachtrag:
Geburtstagsliste = ('Alex',)
for i in Geburtstagsliste:
print (i)
Hier haben wir wieder ein Tupel.
ich kann mir das nicht erklären und es ergibt für mich auch irgendwie logisch gar keinen Sinn:
Weil du die Sprache nicht kennst und die Dokumentation dazu nicht gelesen hast.
https://docs.python.org/3/library/stdtypes.html#tuples
Note that it is actually the comma which makes a tuple, not the parentheses. The parentheses are optional, except in the empty tuple case, or when they are needed to avoid syntactic ambiguity. For example, f(a, b, c) is a function call with three arguments, while f((a, b, c)) is a function call with a 3-tuple as the sole argument.
Das erste Beispiel iteriert nicht über ein Tupel, sondern einen einfachen String - deshalb bearbeitet die for-Schleife die einzelnen Chars davon nacheinander ab.
Das zweite Beispiel ist ein Tupel, weshalb mehrere Elemente nacheinander angezeigt werden
Die obere Geburtstagsliste ist kein Tupel wie unten, sondern ein String.
Dementsprechend wird in deinem oberen Beispiel über jeden char im String iteriert.
In Python kann man Tupel mit nur einem Element so erstellen:
GeburtstagsListe = ('Alex',)
Hier ist auch ersichtlich was passiert, wenn man die Sprache kennt. Das sieht man an den anderen Antworten. Es ist vielleicht für Neulinge nicht offensichtlich.