a = [1, 2, 3, 4]
b = a.index(6)
del a[b]
print(a)
Das Obige zeigt den folgenden Fehler:
Traceback (most recent call last):
File "D:\zjm_code\a.py", line 6, in <module>
b = a.index(6)
ValueError: list.index(x): x not in list
Also muss ich das machen:
a = [1, 2, 3, 4]
try:
b = a.index(6)
del a[b]
except:
pass
print(a)
Aber gibt es nicht einen einfacheren Weg, dies zu tun?
except
ist schlechte Praxis . Verwenden Sieexcept Exception
auf ein Minimum.Antworten:
Verwenden Sie einfach Folgendes, um das erste Vorkommen eines Elements in einer Liste zu entfernen
list.remove
:Beachten Sie, dass nicht alle Vorkommen Ihres Elements entfernt werden. Verwenden Sie dazu ein Listenverständnis.
quelle
remove
ist es O (n)?Normalerweise löst Python eine Ausnahme aus, wenn Sie ihm sagen, dass er etwas tun soll, was er nicht kann. Sie müssen also auch Folgendes tun:
oder:
Eine Ausnahme ist nicht unbedingt eine schlechte Sache, solange Sie sie erwarten und richtig behandeln.
quelle
a.remove(c)
wird, kann dies trotz derif c in a
Prüfung trotzdem fehlschlagen (a
kann nach derc in a
Prüfung, aber vor dema.remove(c)
Aufruf in einem anderen Thread geändert werden ).try/except
oder Schlösser könnten verwendet werden, um die Rennbedingungen zu vermeiden.Du kannst tun
aber oben muss 6 in Liste 2 mal gesucht werden, also versuche es außer wäre schneller
quelle
Erwägen:
Um alle Vorkommen auszuschalten, können Sie die Filterfunktion in Python verwenden. Zum Beispiel würde es so aussehen:
Es würde also alle Elemente von behalten
a != 2
.Um nur einen der Gegenstände herauszunehmen, verwenden Sie
quelle
filter()
in einen anderen einlist()
? Laut Handbuch wird bereits eine Liste zurückgegeben.So geht's an Ort und Stelle (ohne Listenverständnis):
quelle
O(n*n)
unnötig (vergleiche 1e6 und 1e12 - du willst letzteres nicht riskieren).while 1: L.remove(value)
und Return onValueError
funktioniert möglicherweise gut mit einigenvalue
s oder kleinen Listen in CPython.Wenn Sie wissen, welchen Wert Sie löschen müssen, haben Sie folgende einfache Möglichkeit (so einfach ich mir jedenfalls vorstellen kann):
Du wirst kriegen
[0, 0, 2, 3, 4]
quelle
while 1 in a:
als Schleifenstruktur verwenden?O(n^2)
wäre ein VerständnisO(n)
.Eine andere Möglichkeit besteht darin, einen Satz anstelle einer Liste zu verwenden, wenn ein Satz in Ihrer Anwendung anwendbar ist.
IE, wenn Ihre Daten nicht bestellt sind und keine Duplikate haben, dann
ist fehlerfrei.
Oft ist eine Liste nur ein praktischer Container für Artikel, die tatsächlich ungeordnet sind. Es werden Fragen gestellt, wie alle Vorkommen eines Elements aus einer Liste entfernt werden können. Wenn Sie überhaupt keine Dupes wollen, ist wieder ein Set praktisch.
ändert my_set nicht von oben.
quelle
Wie in zahlreichen anderen Antworten angegeben,
list.remove()
funktioniert dies, aber werfen Sie ein,ValueError
wenn das Element nicht in der Liste enthalten war. Mit Python 3.4+ gibt es einen interessanten Ansatz, um dies mithilfe des Unterdrückungskontextmanagers zu handhaben :quelle
Das Suchen eines Werts in einer Liste und das anschließende Löschen dieses Index (falls vorhanden) ist einfacher, indem Sie einfach die Entfernungsmethode der Liste verwenden:
Wenn Sie dies häufig tun, können Sie es in eine Funktion einschließen:
quelle
Dieses Beispiel ist schnell und löscht alle Instanzen eines Werts aus der Liste:
quelle
break
aufexcept ValueError
.In einer Zeile:
manchmal ist es nützlich.
Sogar einfacher:
quelle
Wenn Ihre Elemente unterschiedlich sind, reicht ein einfacher Satzunterschied aus.
quelle
Wir können auch .pop verwenden:
quelle
Überschreiben Sie die Liste, indem Sie alles außer den Elementen indizieren, die Sie entfernen möchten
quelle
Mit einer for-Schleife und einer Bedingung:
Und wenn Sie einige, aber nicht alle entfernen möchten:
quelle
quelle
Nehmen wir zum Beispiel an, wir möchten alle Einsen von x entfernen. So würde ich vorgehen:
Dies ist eine praktische Anwendung meiner Methode:
Und das ist meine Methode in einer einzigen Zeile:
Beide ergeben dies als Ausgabe:
Hoffe das hilft. PS, bitte beachten Sie, dass dies in Version 3.6.2 geschrieben wurde, so dass Sie es möglicherweise für ältere Versionen anpassen müssen.
quelle
Vielleicht funktionieren Ihre Lösungen mit Ints, aber mit Wörterbüchern funktioniert es bei mir nicht.
In einer Hand hat remove () bei mir nicht funktioniert. Aber vielleicht funktioniert es mit grundlegenden Typen. Ich denke, der folgende Code ist auch die Möglichkeit, Elemente aus der Objektliste zu entfernen.
Andererseits hat 'del' auch nicht richtig funktioniert. In meinem Fall mit Python 3.6: Wenn ich versuche, ein Element aus einer Liste in einem 'for'-Bucle mit dem Befehl' del 'zu löschen, ändert Python den Index im Prozess und der Bucle stoppt vorzeitig vorzeitig. Dies funktioniert nur, wenn Sie Element für Element in umgekehrter Reihenfolge löschen . Auf diese Weise ändern Sie den Array-Index für ausstehende Elemente nicht, wenn Sie ihn durchlaufen
Dann werde ich verwendet:
Dabei ist 'Liste' wie [{'Schlüssel1': Wert1 '}, {' Schlüssel2 ': Wert2}, {' Schlüssel3 ': Wert3}, ...]
Sie können auch mehr Python machen, indem Sie aufzählen:
quelle
quelle
Dies entfernt alle Instanzen von
"-v"
aus dem Arraysys.argv
und beschwert sich nicht, wenn keine Instanzen gefunden wurden:Sie können den Code in Aktion in einer Datei mit dem Namen sehen
speechToText.py
:quelle
Dies ist meine Antwort, verwenden Sie einfach während und für
quelle