for schleife

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
StevenB99
User
Beiträge: 33
Registriert: Donnerstag 4. Juni 2020, 23:12

Code: Alles auswählen

liste=[8,8,9,6,5,4,7,8,9,3,9]
x=0
for x in liste:
    print(liste[x])

Ich verstehe den output nicht. 9,9,3,7,4,5,8,9,3 Wie funktioniert das? Ich komme nicht drauf. Index x geht von 0-10 und die liste von 1-11. Normalerweise müsste er doch eine 8 überspringen, weil er von 1 anfängt zu zählen. Kann mir einer bitte den output erklären? Z.b die doppelt 9 am anfang und die 3 in der dritten Stelle des outputs.

index "x" : 0=8, 1=8 , 2=9 , 3=6, 4=5 , 5=4, 6=7 , 7=8 u.s.w
Liste : 1=8, 2=8 , 3=9 , 4=6 , 5=5 , 6=4, 7=7, 8=8 u.s.w
Benutzeravatar
pillmuncher
User
Beiträge: 1530
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Lass dir in der Schleife mal zusätzlich jedes x ausgeben, dann wird es vermutlich klarer.
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
noisefloor
User
Beiträge: 4194
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@StevenB99: du hast du offensichtlich mehrere falsche Denkansätz bzw. einige Verständnisprobleme mit den Grundlagen von Python.

Der Index bei Python is immer Null-basiert, d.h. das erste Element einer Liste, eines Tuples, eines "Iterables" hat immer die Null.

Die Zeile x=0 in deinem Code macht gar nichts, weil x in der nächsten Zeile direkt wieder mit `for x in liste` beim Iterieren über die Liste überschrieben wird.

Die iterierst _nicht_ über den Index sondern direkt über die Liste! Das macht man in Python auch so, nur dass du halt das aktuelle Element der Iteration als Index-Zugriff benutzt. Das funktioniert auch nur zufällig bei dir, weil die größte Zahl in der Liste 9 ist und die Liste noch ein Element am Index 9 (also an 10. Stelle) hat. Wenn liste=[4, 5, 6] oder liste=['a', 'b', 'c'] wäre, würdest du einen Fehler bekommen.

Der Code

Code: Alles auswählen

...
x = 0
for x in range(len(liste)):
    print(liste[x])
würde machen, was du erwartest - macht man aber nicht, dass ist in Python ein absolutes Anti-Pattern.

Wenn du aus irgendwelchen Gründen den Index brauchst, dann nutz' die enumerate-Funktion:

Code: Alles auswählen

...
for index, element in enumerate(liste):
    #do something
Gruß, noisefloor
StevenB99
User
Beiträge: 33
Registriert: Donnerstag 4. Juni 2020, 23:12

Also ist mein output zufällig?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der ist nicht zufällig. Wieso willst du mit den Werten der Liste wieder als Index in sie selbst arbeiten? Welche Absicht steckt dahinter?
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

@StevenB99: Du vewendest eine Programmiersprache - also benutze sie auch zum debuggen. Der Vorteil von Python ist, dass man sich Dinge in der interaktiven Shell einfach ausprobieren kann. Warum machst du das nicht? Warum versuchst du nicht für jede einzelne Zeile herauszufinden, was sie tut - _nicht_ was du denkst, was sie tut? pillmuncher hat doch bereits vorgeschlagen, dass du dir mal die Werte anzeigen lassen sollst, die "x" in der Schleife zugewiesen werden:

Code: Alles auswählen

>>> liste=[8,8,9,6,5,4,7,8,9,3,9]
>>> for x in liste:
	print(x)

	
8
8
9
6
5
4
7
8
9
3
9
>>> 
x ist also beim ersten Durchlauf 8.
Also ist print(liste[x]) -> print(liste[8]) (im ersten Durchlauf)
Es ist also nicht zufällig, dass dann 9 ausgegeben wird, weil das 9. Element in der Liste die Ganzzahl 9 enthält. Und es ist da 9. Element, weil das erste Element den Index 0 hat.
StevenB99
User
Beiträge: 33
Registriert: Donnerstag 4. Juni 2020, 23:12

Ich habe es verstanden , danke vielmals. Es steckt keine Absicht dahinter @_deets_
Antworten