Seite 1 von 1
Kann man eine Liste in einem Durchlauf verändern?
Verfasst: Freitag 14. Januar 2011, 21:21
von rhersel
Angenommen ich habe eine einfache Liste:
Nun möchte ich aus der Liste in einem Durchlauf bestimmte Element entfernen, z.B.:
Ist das erlaubt oder ziehe ich damit dem Listenindex (in der for-Schleife) den Teppich unter den Füssen weg?
Re: Kann man eine Liste in einem Durchlauf verändern?
Verfasst: Freitag 14. Januar 2011, 21:23
von derdon
Re: Kann man eine Liste in einem Durchlauf verändern?
Verfasst: Freitag 14. Januar 2011, 21:35
von rhersel
Genial!
Ich iteriere über die Kopie und verändere das Original. Habe ich das richtig verstanden?
Re: Kann man eine Liste in einem Durchlauf verändern?
Verfasst: Freitag 14. Januar 2011, 21:38
von rhersel
Aber warum funktioniert das hier denn trotzdem?
Code: Alles auswählen
>>> a = [1,2,3,4,5]
>>> for i in a:
... if i==3:
... a.remove(i)
...
>>> a
[1, 2, 4, 5]
Re: Kann man eine Liste in einem Durchlauf verändern?
Verfasst: Freitag 14. Januar 2011, 21:46
von ntrunk
rhersel hat geschrieben:Aber warum funktioniert das hier denn trotzdem?
[...]
Tut es nicht. Probier mal
Code: Alles auswählen
a = [1,2,3,4,5]
for i in a:
if i in (3,4):
a.remove(i)
print a
Du bringst, wie du vermutet hast, tatsächlich den internen Index durcheinander.
Gruß
Nobert
Re: Kann man eine Liste in einem Durchlauf verändern?
Verfasst: Freitag 14. Januar 2011, 21:53
von DasIch
list.remove() hat eine Performance von O(n) und sollte deswegen vermieden werden wenn man mehrere Elemente entfernen will. Da sollte man eine LC oder filter() zu verwenden und eine neue Liste erzeugen.