Eine Minuten bitte, Ich HAP eine kleine Problemo avec Diese Religione. - Eddie Izzard (facendo la sua impressione di Martin Lutero)
Cancellazione dal reverse-iterazione su un elenco di preservare l'iteratore è una soluzione comune a questo problema. Ma un'altra soluzione è quella di cambiare questo in un altro problema. Invece di eliminare elementi dall'elenco utilizzando alcuni criteri (nel tuo caso l'indice esiste in un elenco di indici da eliminare), crea un nuovo elenco che ometta gli elementi offensivi.
L[:] = [ item for i,item in enumerate(L) if i not in I ]
Del resto, da dove si arriva con gli indici in I
, in primo luogo? È possibile combinare la logica di rimuovere gli indici e creare la nuova lista. Supponendo che questo è un elenco di oggetti e si desidera solo per mantenere quelli che passano una isValid
prova:
L[:] = [ item for item in L if item.isValid() ]
Questo è molto più semplice rispetto:
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]
Per la maggior parte, mi rivolgo qualche domanda su "come eliminare da un elenco gli elementi che non voglio" in "come creare un nuovo elenco contenente solo gli elementi che voglio".
MODIFICATO: modificato "L = ..." in "L [:] = ..." per risposta di Alex Martelli allo this question.
dupe http://stackoverflow.com/questions/497426/deleting-multiple-elements-from-a-list – SilentGhost