Hier ist eine Alternative, bei der enumerate () nicht zum Erstellen von Tupeln verwendet wird (wie in der ursprünglichen Antwort von SilentGhost).
Dies scheint mir lesbarer zu sein. (Vielleicht würde ich mich anders fühlen, wenn ich es gewohnt wäre, Aufzählungen zu verwenden.) CAVEAT: Ich habe die Leistung der beiden Ansätze nicht getestet.
# 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 ]
HINWEIS: Python 2.7-Syntax. Für Python 3 xrange
=>range
.
Verwendung:
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 ---
Löschen Sie mehrere Werte aus einer Liste. Das heißt, wir haben die Werte, die wir löschen möchten:
# 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 ]
Verwendung:
somelist = delete__by_values( lst, [0, 44, 55] )
Somelist:
[11, 22, 33, 66, 77, 88, 99]
Dies ist die gleiche Antwort wie zuvor, aber diesmal haben wir die zu löschenden WERTE angegeben [0, 44, 55]
.