Voici une alternative, qui n'utilise pas enumerate () pour créer des tuples (comme dans la réponse originale de SilentGhost).
Cela me semble plus lisible. (Peut-être que je me sentirais différemment si j'avais l'habitude d'utiliser enumerate.) CAVEAT: Je n'ai pas testé les performances des deux approches.
# 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 ]
REMARQUE: syntaxe Python 2.7. Pour Python 3, xrange
=> range
.
Usage:
lst = [ 11*x for x in xrange(10) ]
somelist = delete_by_indices( lst, [0, 4, 5])
une liste:
[11, 22, 33, 66, 77, 88, 99]
--- PRIME ---
Supprimez plusieurs valeurs d'une liste. Autrement dit, nous avons les valeurs que nous voulons supprimer:
# 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 ]
Usage:
somelist = delete__by_values( lst, [0, 44, 55] )
une liste:
[11, 22, 33, 66, 77, 88, 99]
C'est la même réponse que précédemment, mais cette fois nous avons fourni les VALEURS à supprimer [0, 44, 55]
.