Seite 1 von 1
for - Schleife Ausgabe
Verfasst: Donnerstag 23. März 2023, 20:17
von norgsmen
Hi Leute,
es geht um diesen kleinen Code hier:
Code: Alles auswählen
li = [100, 78, 98, 62, 54, 36, 145]
for i in range(len(li)-2):
test = li[i + 2]
print(test)
Im Schleifenkopf wird ja definiert, dass von 0 bis 4 die Werte in der Liste durchlaufen werden sollen. Also →
100, 78, 98, 62, 54
Weshalb ist dann die Ausgabe für
test = li[i + 2] nicht
98, 62, 54 ? Sollte die Schleife soll nicht bei 98 angefangen und bis zu den vorletzten Elementen aufhören wegen des
(li)-2) ?
Danke fürs Antworten!
Re: for - Schleife Ausgabe
Verfasst: Donnerstag 23. März 2023, 20:43
von Axel-WAK
vielleicht eher so?
Code: Alles auswählen
li = [100, 78, 98, 62, 54, 36, 145]
for i in range(len(li)-2):
test = li[i]
print(test)
Re: for - Schleife Ausgabe
Verfasst: Donnerstag 23. März 2023, 20:50
von Sirius3
@norgsmen: wie Du schon geschrieben hast, nimmt i die Werte 0 bis 4 an, also geht i+2 von 2 bis 6.
Denn anderfalls muß ja i bis len(li) - 4 gehen, damit len(li) - 4 + 2 wieder len(li) - 2 ergibt.
Eingerückt wird mit 4 Leerzeichen pro Ebene, keine Tabs.
Um solche Mißverständisse zu umgehen, sollte man die Schleife gleich über die richtigen Werte laufen lassen, und sie nicht nachträglich umrechnen:
Code: Alles auswählen
li = [100, 78, 98, 62, 54, 36, 145]
for i in range(2, len(li)):
test = li[i]
print(test)
Über einen Index iteriert man aber nicht, sondern über die Listenelemente direkt:
Code: Alles auswählen
li = [100, 78, 98, 62, 54, 36, 145]
for test in li[2:]:
print(test)
Re: for - Schleife Ausgabe
Verfasst: Donnerstag 23. März 2023, 21:12
von norgsmen
@Sirius3 Achso okay. Ich dachte nämlich, die Bedingung, die man im Schleifenkopf definiert (in dem Fall: for i in range(len(li)-2)) ist konstant.
Also immer → 0 bis 4 . (ich wusste nicht das man die Bedingung im Verlauf des weiteren Codes ändern kann)
Was aber noch unverständlich ist ist, warum weitere Zahlen als 2 bis 6 ausgegeben werden, wenn ich die Liste um weitere Zahlen erweitere. Dann zählt nämlich li[i + 2] nicht mehr.
Re: for - Schleife Ausgabe
Verfasst: Donnerstag 23. März 2023, 21:37
von Sirius3
Nein, `range(len(li) + 2)` ändert sich nicht innerhalb der Schleife, weil das ja schon zu Beginn der Schleife ausgewertet wird. Daher ändert sich das auch nicht, wenn man innerhalb der Schleife die Liste ändert. Sowas sollte man aber auch niemals machen, denn das kann zu seltsamen Effekten führen. Und wie schon geschrieben, solle man gar nicht erst mit Indices anfangen.
Re: for - Schleife Ausgabe
Verfasst: Freitag 24. März 2023, 18:53
von DeaD_EyE
Beispiel mit itertools.islice:
Code: Alles auswählen
from itertools import islice
li = [100, 78, 98, 62, 54, 36, 145]
# iteriere ab Index 2 bis zum Ende
for value in islice(li, 2, None):
print(value)