Aquí hay una alternativa, que no utiliza enumerate () para crear tuplas (como en la respuesta original de SilentGhost).
Esto me parece más legible. (Tal vez me sentiría diferente si tuviera la costumbre de usar enumerar). CAVEAT: No he probado el rendimiento de los dos enfoques.
# Returns a new list. "lst" is not modified.
def delete_by_indices(lst, indices):
indices_as_set = set(indices)
return [ lst[i] for i in xrange(len(lst)) if i not in indices_as_set ]
NOTA: sintaxis de Python 2.7. Para Python 3, xrange
=> range
.
Uso:
lst = [ 11*x for x in xrange(10) ]
somelist = delete_by_indices( lst, [0, 4, 5])
somelista
[11, 22, 33, 66, 77, 88, 99]
--- BONIFICACIÓN ---
Eliminar múltiples valores de una lista. Es decir, tenemos los valores que queremos eliminar:
# Returns a new list. "lst" is not modified.
def delete__by_values(lst, values):
values_as_set = set(values)
return [ x for x in lst if x not in values_as_set ]
Uso:
somelist = delete__by_values( lst, [0, 44, 55] )
somelista
[11, 22, 33, 66, 77, 88, 99]
Esta es la misma respuesta que antes, pero esta vez proporcionamos los VALORES que se eliminarán [0, 44, 55]
.