4 Stimmen

Suche nach einer Teilzeichenkette in einem Element in einer Liste und Löschen des Elements

Ich habe eine Liste, und ich versuche, die Elemente zu löschen, die eine 'pie' in ihnen. Das habe ich getan:

['applepie','orangepie', 'turkeycake']
for i in range(len(list)):
    if "pie" in list[i]:
         del list[i]

Ich erhalte immer Listenindex außerhalb des Bereichs, aber wenn ich die del zu einer print Anweisung werden die Elemente korrekt ausgedruckt.

6voto

Mark Longair Punkte 412179

Anstatt ein Element aus der Liste zu entfernen, über die Sie iterieren, versuchen Sie, eine neue Liste mit Pythons netter Syntax des Listenverständnisses :

foods = ['applepie','orangepie', 'turkeycake']
pieless_foods =  [f for f in foods if 'pie' not in f]

2voto

Abhijit Punkte 58646

Wenn ein Element während der Iteration gelöscht wird, ändert sich die Größe, was zu IndexError führt.

Sie können Ihren Code wie folgt umschreiben (mit List Comprehension)

L = [e for e in L if "pie" not in e]

2voto

Jon Clements Punkte 134241

Etwa so:

stuff = ['applepie','orangepie', 'turkeycake']
stuff = [item for item in stuff if not item.endswith('pie')]

Das Ändern eines Objekts, über das Sie iterieren, sollte als ein No-Go betrachtet werden.

1voto

Willy Punkte 635

Der Grund, warum Sie eine Fehlermeldung erhalten, ist, dass Sie die Länge der Liste ändern, wenn Sie etwas löschen!

Ejemplo:

first loop: i = 0, length of list will become 1 less because you delete "applepie" (length is now 2)
second loop: i = 1, length of list will now become just 1 because we delete "orangepie"
last/third loop: i = 2, Now you should see the problem, since i = 2 and the length of the list is only 1 (to clarify only list[0] have something in it!).

Verwenden Sie also lieber etwas wie:

for item in in list:
    if "pie" not in item:
        new list.append(item)

0voto

AJ. Punkte 1136

Ein anderer, aber längerer Weg wäre, die Indizes zu notieren, bei denen Sie auf Kuchen stoßen, und diese Elemente nach der ersten for-Schleife zu löschen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X