In Python weiß ich, wie man Elemente aus einer Liste entfernt.
item_list = ['item', 5, 'foo', 3.14, True]
item_list.remove('item')
item_list.remove(5)
Dieser obige Code entfernt die Werte 5 und 'item' aus item_list. Aber wenn es viel zu entfernen gibt, muss ich viele Zeilen schreiben
item_list.remove("something_to_remove")
Wenn ich den Index dessen kenne, was ich entferne, verwende ich:
del item_list[x]
Dabei ist x der Index des Elements, das ich entfernen möchte.
Wenn ich den Index aller Zahlen kenne, die ich entfernen möchte, verwende ich eine Art Schleife für del
die Elemente an den Indizes.
Aber was ist, wenn ich die Indizes der Elemente, die ich entfernen möchte, nicht kenne?
Ich habe es versucht item_list.remove('item', 'foo')
, aber ich habe eine Fehlermeldung erhalten, dass remove
nur ein Argument erforderlich ist.
Gibt es eine Möglichkeit, mehrere Elemente in einer einzigen Anweisung aus einer Liste zu entfernen?
PS Ich habe verwendet del
und remove
. Kann jemand den Unterschied zwischen diesen beiden erklären oder sind sie gleich?
Vielen Dank
del
Löscht ein Element anhand seines Index. Dieremove
Funktion einer Liste findet den Index eines Elements und ruftdel
diesen Index dann auf.Antworten:
In Python ist das Erstellen eines neuen Objekts häufig besser als das Ändern eines vorhandenen Objekts:
Welches ist gleichbedeutend mit:
Bei einer großen Liste herausgefilterter Werte (hier
('item', 5)
ein kleiner Satz von Elementen) kann die Verwendung von aset
zu einer Leistungsverbesserung führen, da diein
Operation in O (1) ausgeführt wird:Beachten Sie, dass, wie in den Kommentaren erläutert und hier vorgeschlagen , Folgendes noch mehr Zeit sparen kann, wodurch vermieden wird, dass der Satz in jeder Schleife erstellt wird:
Ein Bloom-Filter ist auch eine gute Lösung, wenn der Speicher nicht billig ist.
quelle
in
Bedienung. In diesen Benchmarks finden Sie Vergleiche der vier primitiven Datenstrukturen. Ja, die Menge wird in jeder Schleife erstellt, wie hier vorgeschlagen. Wenn Sie die Menge daher in einer dedizierten Variablen speichern, die im Generatorausdruck verwendet wird, können Sie Zeit sparen.id(item_list)
vorher und nachher vergleichenitem_list = [e for e in item_list if e not in ('item', 5)]
. Überprüfen Sie meine Antwort, um zu sehen, wie Sie eine Liste an Ort und Stelle ändern können.Die endgültige Liste nach dem Entfernen sollte wie folgt lauten
Einzeiliger Code
Ausgabe wäre wie folgt
quelle
Ich weiß nicht, warum jeder vergessen hat, die erstaunlichen Fähigkeiten von
set
s in Python zu erwähnen . Sie können Ihre Liste einfach in einen Satz umwandeln und dann alles, was Sie entfernen möchten, in einem einfachen Ausdruck wie folgt entfernen:quelle
Ich poste meine Antwort von hier aus neu , weil ich gesehen habe, dass sie auch hier passt. Es ermöglicht das Entfernen mehrerer Werte oder nur das Duplizieren dieser Werte und gibt entweder eine neue Liste zurück oder ändert die angegebene Liste.
Docstring-Erweiterung:
Sie sollten sich darüber im Klaren sein, was Sie wirklich tun möchten, eine vorhandene Liste ändern oder eine neue Liste mit den fehlenden spezifischen Elementen erstellen. Es ist wichtig, diese Unterscheidung zu treffen, wenn Sie einen zweiten Verweis auf die vorhandene Liste haben. Wenn Sie zum Beispiel haben ...
Dies kann das gewünschte Verhalten sein oder auch nicht.
quelle
Sie können die Filterfalse- Funktion aus dem itertools- Modul verwenden
Beispiel
Ausgabe:
quelle
Ich verstehe nicht genau, warum Sie .remove nicht mögen, aber um den ersten Index zu erhalten, der einem Wert entspricht, verwenden Sie .index (Wert):
Entfernen Sie dann den entsprechenden Wert:
.index (Wert) erhält das erste Auftreten von Wert und .remove (Wert) entfernt das erste Auftreten von Wert
quelle
del item_list[ind]
statt,pop
wenn Sie den Ergebniswert nicht benötigen.Sie können dies verwenden -
Angenommen, wir haben eine Liste,
l = [1,2,3,4,5]
Wir möchten die letzten beiden Elemente in einer einzigen Anweisung löschen
Wir haben ausgegeben:
Halte es einfach
quelle