Ecco un'alternativa, che non usa enumerate () per creare tuple (come nella risposta originale di SilentGhost).
Questo mi sembra più leggibile. (Forse mi sentirei diversamente se avessi l'abitudine di usare enumerate.) CAVEAT: Non ho testato le prestazioni dei due approcci.
# 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: sintassi di Python 2.7. Per Python 3, xrange=> range.
Uso:
lst = [ 11*x for x in xrange(10) ]
somelist = delete_by_indices( lst, [0, 4, 5])
somelist:
[11, 22, 33, 66, 77, 88, 99]
--- BONUS ---
Elimina più valori da un elenco. Cioè, abbiamo i valori che vogliamo eliminare:
# 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] )
somelist:
[11, 22, 33, 66, 77, 88, 99]
Questa è la stessa risposta di prima, ma questa volta abbiamo fornito i VALORI da eliminare [0, 44, 55].