Python3: For-Schleife überspringt Element der Liste?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Das mag einem zwar komisch vorkommen, es ist aber ein dokumentiertes Verhalten:

Siehe:

Python help / The Python language reference / Compound statements / for - statement

Note

There is a subtlety when the sequence is being modified by the loop (this can only occur for mutable sequences, e.g. lists). An internal counter is used to keep track of which item is used next, and this is incremented on each iteration. When this counter has reached the length of the sequence the loop terminates. This means that if the suite deletes the current (or a previous) item from the sequence, the next item will be skipped (since it gets the index of the current item which has already been treated).

Ob du das Element vor dem remove ausgibst oder nicht, spielt keine Rolle.

cedhar 
Fragesteller
 26.05.2021, 21:55

Dass das dokumentiert ist, finde ich interessant! Danke.

0

Jedes mal wenn du ein Element aus der Liste entfernst ändert sich der Index der Liste und dann ist das 0te, 1te, 2te, usw. Element ein anderer als vorher.

Naja, du printest ja das i bevor du es removst. Zudem ist ein bearbeeiten einer List, durch die du gerade duchrläufst keine besonder gut idee besser wäre sowas.

l = [1,2,3,4,5]
l = [i for i in l if i not in [2,3]]
print(*l, sep='\n')
Woher ich das weiß:Studium / Ausbildung – Informatikstudent
cedhar 
Fragesteller
 26.05.2021, 21:34

Ich glaube du verstehst nicht ganz. Natürlich ist die list-Comprehension klüger. Ich finde nur das Ergebnis interessant, dass Elemente der Liste übersprungen werden.

0
whgoffline  26.05.2021, 21:36
@cedhar

Wenn du sie überspringen willst, dann printe sie doch einfach nicht?

l = [1,2,3,4,5]
for i in l:
  if i not in [2,3]:
    print(i)
0