Eine Minuten bitte, Ich hap Eine kleine Problemo avec diese Religione. - Eddie Izzard (haciendo su impresión de Martin Luther)
Borrado en más de una lista de preservar el iterador la iteración inversa es una solución común a este problema. Pero otra solución es cambiar esto en un problema diferente. En lugar de eliminar elementos de la lista utilizando algunos criterios (en su caso, el índice existe en una lista de índices que se eliminarán), cree una nueva lista que omita los elementos ofensivos.
L[:] = [ item for i,item in enumerate(L) if i not in I ]
Por lo demás, en donde se les ocurrió con los índices en I
en el primer lugar? Podría combinar la lógica de eliminar los índices y crear la nueva lista. Asumiendo que esto es una lista de objetos y sólo se quieren mantener los que pasan una isValid
prueba:
L[:] = [ item for item in L if item.isValid() ]
Esto es mucho más sencillo que:
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]
En su mayor parte, vuelvo a cualquier pregunta sobre "cómo eliminar de una lista los ítems que no quiero" en "cómo crear una nueva lista que contenga solo los ítems que quiero".
EDITADO: cambió "L = ..." a "L [:] = ..." según la respuesta de Alex Martelli al this question.
dupe http://stackoverflow.com/questions/497426/deleting-multiple-elements-from-a-list – SilentGhost