Oto alternatywa, która nie używa enumerate () do tworzenia krotek (tak jak w oryginalnej odpowiedzi SilentGhost).
Wydaje mi się to bardziej czytelne. (Może czułbym się inaczej, gdybym miał w zwyczaju wyliczać). PRZESTROGA: Nie testowałem wydajności tych dwóch podejść.
# 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 ]
UWAGA: składnia Pythona 2.7. W przypadku Pythona 3 xrange=> range.
Stosowanie:
lst = [ 11*x for x in xrange(10) ]
somelist = delete_by_indices( lst, [0, 4, 5])
lista:
[11, 22, 33, 66, 77, 88, 99]
--- BONUS ---
Usuń wiele wartości z listy. Oznacza to, że mamy wartości, które chcemy usunąć:
# 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 ]
Stosowanie:
somelist = delete__by_values( lst, [0, 44, 55] )
lista:
[11, 22, 33, 66, 77, 88, 99]
To ta sama odpowiedź co poprzednio, ale tym razem dostarczyliśmy WARTOŚCI do usunięcia [0, 44, 55].