Borrar elementos de una lista por índices

Arnau Sanchez arnau en ehas.org
Dom Jul 2 11:33:04 CEST 2006


Buenas,

Ya son varias las veces que me he encontrado con que necesitaba borrar 
elementos de una lista según su índice, no su valor. ¿Cuál creéis que 
sería la mejor forma de hacerlo?

Para empezar, la más evidente:

# lista
aborrar = [1,4,8]
salida = [lista[x] for x in range(len(lista)) if x not in aborrar]

Problema: hay que recorrer toda la lista, y además crear una nueva, no 
parece muy eficiente.

¿Y si tratáramos de hacerlo "in-place"? El "del" sólo borra elementos 
individuales o slices, así que habría que hacer un bucle. Pero entonces 
nos encontramos que, de una iteración a otra, la lista ha perdido un 
elemento, por lo que habría que hacer una corrección, tal que así:

# lista
aborrar = [1,4,8]
for n, ab in enumerate(aborrar):
         del lista[ab-n]
	
que a primera vista es poco elegante.

¿Se os ocurre alguna otra forma?

salud!
arnau




Más información sobre la lista de distribución Python-es