ich habe ein Problem mit der vollständigen Iterierung einer Liste:
Angenommen, ich habe folgende Liste "liste":
Code: Alles auswählen
liste = ['aaa', 'bbb', 'bbb', 'ccc']
Code: Alles auswählen
import re
pat = re.compile('^bbb$')
for elem in liste:
if re.match(pat, elem):
liste.remove(elem)
Code: Alles auswählen
['aaa', 'bbb', 'ccc']
Python prüft das erste Element in der Liste ("aaa"); dieses matched nicht, also: Next.
Das zweite Element (index 1) matched; also wird es mit der Listenmethode ".remove" entfernt. Dabei rücken die nachfolgenden Elemente eine Position "nach links"; das 2. "bbb" an index 2 rückt auf index 1, das "ccc" auf index 3 rückt auf index 2. Python weiß: Er hat gerade index 1 verarbeitet, also ist als nächstes index 2 dran. Auf index 2 liegt aber ja nicht mehr das eigentlich "nächste" Element, sondern "ccc". Hierdurch wird das 2. "bbb" nie bearbeitet.
Frage 1: Alles richtig soweit, oder bin ich da auf dem Holzweg?
Frage 2: Wie mache ich dieses denn "Korrekt", also: So das alle Elemente einmal verarbeitet werden? Eine Methode wäre ja alles was NICHT matched in eine neue Liste zu kopieren und die alte anschließend zu verwerfen; das fühlt sich aber irgendwie unsauber an und ich vermute, das das unerwünschte Seiteneffekte haben könnte. Das wird doch wohl auch irgendwie in der Liste gehen, oder?
Danke schonmal für Eure Hilfe!
LG
