Eine Minute please, Ich hap Eine kleine Problemo avec this Religione. - Eddie Izzard (seinen Eindruck von Martin Luther zu tun)
Löschen von Reverse-Iteration über eine Liste den Iterator zu erhalten ist eine gemeinsame Lösung für dieses Problem. Eine andere Lösung besteht darin, dies in ein anderes Problem zu verwandeln. Anstatt Elemente aus der Liste mit bestimmten Kriterien zu löschen (in Ihrem Fall existiert der Index in einer Liste von zu löschenden Indizes), erstellen Sie eine neue Liste, in der die fehlerhaften Elemente nicht vorhanden sind.
L[:] = [ item for i,item in enumerate(L) if i not in I ]
Für diese Angelegenheit, wo Sie mit dem Indizes in I
an erster Stelle kommen haben? Sie könnten die Logik kombinieren, um die Indizes zu entfernen und die neue Liste zu erstellen. Unter der Annahme, dies ist eine Liste von Objekten, und Sie wollen nur diejenigen halten, die einen isValid
Test bestehen:
L[:] = [ item for item in L if item.isValid() ]
Das ist viel einfacher als:
I = set()
for i in range(len(L)):
if not L[i].isValid():
I.add(i)
for i in sorted(I, reverse=True):
del L[i]
Zum größten Teil, schalte ich jede Frage über "Wie man aus einer Liste die Elemente löscht, die ich nicht möchte" in "wie man eine neue Liste erstellt, die nur die Elemente enthält, die ich möchte".
BEARBEITUNG: geändert "L = ..." zu "L [:] = ..." laut Alex Martellis Antwort auf this question.
dupe http://stackoverflow.com/questions/497426/deleting-multiple-elements-from-a-list – SilentGhost