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