Ja, removeentfernt den ersten übereinstimmenden Wert , keinen bestimmten Index:
>>> a =[0,2,3,2]>>> a.remove(2)>>> a[0,3,2]
del Entfernt das Element an einem bestimmten Index:
>>> a =[9,8,7,6]>>>del a[1]>>> a[9,7,6]
und popentfernt das Element an einem bestimmten Index und gibt es zurück.
>>> a =[4,3,5]>>> a.pop(1)3>>> a[4,5]
Ihre Fehlermodi sind ebenfalls unterschiedlich:
>>> a =[4,5,6]>>> a.remove(7)Traceback(most recent call last):File"<stdin>", line 1,in<module>ValueError: list.remove(x): x notin list>>>del a[7]Traceback(most recent call last):File"<stdin>", line 1,in<module>IndexError: list assignment index out of range>>> a.pop(7)Traceback(most recent call last):File"<stdin>", line 1,in<module>IndexError: pop index out of range
@jxramos: delist kein Syntax-Holdover, nein. Die Syntax bleibt unverändert, genau wie returnoder ifoder while.
Martijn Pieters
6
Es ist erwähnenswert, dass Benutzer vorsichtig sein sollten, wenn sie eine Liste durchlaufen und diese Funktionen gleichzeitig mit der Iteration verwenden.
Hamaney
16
Das delBeispiel ist etwas irreführend. Welches Element wird genau entfernt? Der 2. oder der 3.? Sie sollten verwendet haben [9, 8, 7, 6], del a[1]und[9, 7, 6]
gromit190
2
@ rite2hhh es prüft auf Gleichheit. Gleichheitstests testen zuerst die Identität als Optimierung
Verwenden Sie deldiese Option , um ein Element nach Index pop()zu entfernen, um es nach Index zu entfernen, wenn Sie den zurückgegebenen Wert benötigen, und remove()um ein Element nach Wert zu löschen. Letzteres erfordert das Durchsuchen der Liste und wird ausgelöst, ValueErrorwenn in der Liste kein solcher Wert vorkommt.
Beim Löschen eines Index iaus einer Liste von nElementen sind die rechnerischen Komplexitäten dieser Methoden
+1 für die Aufschlüsselung der Komplexität. Veranschaulicht, wie Löschen und Pop konstant sind, wenn sich das Element am Ende der Liste befindet.
Big Sharpie
2
Denken Sie daran, Leute ... alles, was auf einem Index basiert, ist ein Schuss O (n-1) ... Wenn Sie eine Suche (nach Wert) durchführen müssen, durchläuft es die Sammlung, bis das Element gefunden wird.
Pepito Fernandez
2
@PepitoFernandez Nachschlagen nach Index in einer Liste sind in Python O (1). (Eine Liste in Python ähnelt einem Vektor in C ++.)
Sven Marnach
3
@PlasmaBinturong Sie sollten das verwenden, was Ihrer Meinung nach besser lesbar ist, es sei denn, Sie haben Daten, die belegen, dass die Leistung wichtig ist. Und wenn ja, müssen Sie messen, was in Ihrem speziellen Fall schneller ist. Ich vermute auch, dass dies deletwas schneller ist, aber aus einem anderen Grund: Die Suche nach __delitem__einem in C implementierten Typ erfolgt eher nach Index als nach Name, während popnach dem gesamten Deskriptorprotokoll gesucht werden muss. Die Ausführung der Funktionen selbst sollte genauso lange dauern. Beide geben einen Zeiger zurück - einen auf das entfernte Objekt, den anderen auf None.
Sven Marnach
91
Da dies von niemand anderem erwähnt wurde, ist zu beachten, dass del(im Gegensatz zu pop) das Entfernen einer Reihe von Indizes aufgrund von Listenaufteilung möglich ist:
>>> lst =[3,2,2,1]>>>del lst[1:]>>> lst
[3]
Dies ermöglicht auch die Vermeidung von a, IndexErrorwenn der Index nicht in der Liste enthalten ist:
Schon ganz gut von anderen beantwortet. Dieser von meinem Ende :)
Offensichtlich popist es das einzige, das den Wert zurückgibt, und es removeist das einzige, das das Objekt durchsucht, während es delsich auf ein einfaches Löschen beschränkt.
Danke! Ein Hinweis: In Python ist "Advance bis zu dieser Knotenposition" aufgrund der Art und Weise, wie die Listen implementiert sind (es gibt praktisch Arrays ...!), O (1)
ntg
19
Viele beste Erklärungen sind hier, aber ich werde mein Bestes geben, um mehr zu vereinfachen.
Unter all diesen Methoden sind Reverse & Pop Postfix, während Delete das Präfix ist .
remove (): Dient zum Entfernen des ersten Auftretens eines Elements
remove(i) => erstes Auftreten des i-Wertes
>>> a =[0,2,3,2,1,4,6,5,7]>>> a.remove(2)# where i = 2>>> a
[0,3,2,1,4,6,5,7]
pop (): Dient zum Entfernen von Elementen, wenn:
nicht spezifiziert
pop() => vom Ende der Liste
>>>a.pop()>>>a
[0,3,2,1,4,6,5]
spezifizierten
pop(index) => des Index
>>>a.pop(2)>>>a
[0,3,1,4,6,5]
WARNUNG: Gefährliche Methode voraus
delete () : Dies ist eine Präfixmethode.
Behalten Sie zwei verschiedene Syntax für dieselbe Methode im Auge: [] und (). Es besitzt die Macht:
1. Index löschen
del a[index] => wird verwendet, um den Index und den zugehörigen Wert genau wie pop zu löschen.
>>>del a[1]>>>a
[0,1,4,6,5]
2. Werte im Bereich löschen [Index 1: Index N]
del a[0:3] => mehrere Werte im Bereich
>>>del a[0:3]>>>a
[6,5]
3.Letzte, aber keine Liste, um die gesamte Liste auf einmal zu löschen
Jede Operation / Funktion für verschiedene Datenstrukturen ist für bestimmte Aktionen definiert. Hier in Ihrem Fall dh ein Element entfernen, löschen, Pop und entfernen. (Wenn Sie Sätze in Betracht ziehen, fügen Sie eine weitere Operation hinzu - verwerfen Sie) Ein anderer verwirrender Fall ist beim Hinzufügen. Einfügen / Anhängen. Lassen Sie uns zur Demonstration deque implementieren. deque ist eine hybride lineare Datenstruktur, in der Sie Elemente an beiden Enden hinzufügen / entfernen können. (Hinteres und vorderes Ende)
Während Pop und Delete beide Indizes verwenden, um ein Element zu entfernen, wie in den obigen Kommentaren angegeben. Ein wesentlicher Unterschied ist die zeitliche Komplexität für sie. Die zeitliche Komplexität für pop () ohne Index ist O (1), ist jedoch nicht der gleiche Fall für das Löschen des letzten Elements.
Dies ist in mehrfacher Hinsicht falsch. Es gibt keine Methode wie delete. Die Unterschiede bestehen darin, dass popder Wert zurückgegeben wird und dass dies delfür Slices funktioniert. In Fällen, in denen popfunktioniert, delhat genau die gleiche Rechenkomplexität (und ist durch einen konstanten Term etwas schneller).
Abarnert
1
Der Entfernungsvorgang für eine Liste erhält einen zu entfernenden Wert. Es durchsucht die Liste nach einem Element mit diesem Wert und löscht das erste übereinstimmende Element, das es findet. Es ist ein Fehler, wenn kein übereinstimmendes Element vorhanden ist, und löst einen ValueError aus .
>>> x =[1,0,0,0,3,4,5]>>> x.remove(4)>>> x
[1,0,0,0,3,5]>>>del x[7]Traceback(most recent call last):File"<pyshell#1>", line 1,in<module>del x[7]IndexError: list assignment index out of range
Mit der del- Anweisung kann eine gesamte Liste gelöscht werden. Wenn Sie ein bestimmtes Listenelement als Argument für del haben (z. B. Listenname [7], um speziell auf das 8. Element in der Liste zu verweisen), wird dieses Element einfach gelöscht. Es ist sogar möglich, ein "Slice" aus einer Liste zu löschen. Es ist ein Fehler, wenn der Index außerhalb des Bereichs liegt und einen IndexError auslöst .
>>> x =[1,2,3,4]>>>del x[3]>>> x
[1,2,3]>>>del x[4]Traceback(most recent call last):File"<pyshell#1>", line 1,in<module>del x[4]IndexError: list assignment index out of range
Die übliche Verwendung von Pop besteht darin, das letzte Element aus einer Liste zu löschen, während Sie die Liste als Stapel verwenden. Im Gegensatz zu del gibt pop den Wert zurück, den es aus der Liste entfernt hat. Sie können Pop und Pop optional einen anderen Indexwert als das Ende der Liste zuweisen (z. B. listname.pop (0) löscht das erste Element aus der Liste und gibt das erste Element als Ergebnis zurück). Sie können dies verwenden, damit sich die Liste wie eine Warteschlange verhält. Es stehen jedoch Bibliotheksroutinen zur Verfügung, mit denen Warteschlangenoperationen eine bessere Leistung erzielen können als pop (0). Es ist ein Fehler, wenn der Index außerhalb des Bereichs liegt und einen IndexError auslöst .
>>> x =[1,2,3]>>> x.pop(2)3>>> x
[1,2]>>> x.pop(4)Traceback(most recent call last):File"<pyshell#1>", line 1,in<module>
x.pop(4)IndexError: pop index out of range
Entfernen funktioniert grundsätzlich am Wert. Löschen und Pop-Arbeiten am Index
Entfernen entfernt im Grunde den ersten übereinstimmenden Wert. Löschen löscht das Element aus einem bestimmten Index. Pop nimmt grundsätzlich einen Index und gibt den Wert an diesem Index zurück. Wenn Sie das nächste Mal die Liste drucken, wird der Wert nicht angezeigt.
Obwohl wir uns für Ihre Antwort bedanken, wäre es besser, wenn sie zusätzlich zu den anderen Antworten einen zusätzlichen Wert liefern würde. In diesem Fall bietet Ihre Antwort keinen zusätzlichen Wert, da andere Benutzer alles abdeckten, was Sie in Ihre Antwort aufgenommen haben. Als sekundäres Problem fügen Sie bitte keinen Text als Bilder ein, wenn Sie ihn als Text einfügen könnten. Wenn eine vorherige Antwort für Sie hilfreich war, sollten Sie sie abstimmen .
David Buck
-3
Sie können auch entfernen verwenden, um einen Wert auch nach Index zu entfernen.
Versuchen Sie es n = [5, 3, 5]dann n.remove(n[2]).
abarnert
@abarnert Ihr Anwendungsfall funktioniert synchron mit dem folgenden Fall n = [5,3,5], dann n.remove (5). Beide entfernen das erste angetroffene Element aus der Liste.
Akhil Ghatiki
@AkhilGhatiki n.remove(n[2])entfernt n[0], nicht n[2]. Es ist also nicht nur lineare Zeit ohne Grund (vielleicht keine große Sache, wenn N = 3), es ist auch falsch (eine große Sache, egal was N ist)
Antworten:
Ja,
remove
entfernt den ersten übereinstimmenden Wert , keinen bestimmten Index:del
Entfernt das Element an einem bestimmten Index:und
pop
entfernt das Element an einem bestimmten Index und gibt es zurück.Ihre Fehlermodi sind ebenfalls unterschiedlich:
quelle
del
ist kein Syntax-Holdover, nein. Die Syntax bleibt unverändert, genau wiereturn
oderif
oderwhile
.del
Beispiel ist etwas irreführend. Welches Element wird genau entfernt? Der 2. oder der 3.? Sie sollten verwendet haben[9, 8, 7, 6]
,del a[1]
und[9, 7, 6]
Verwenden Sie
del
diese Option , um ein Element nach Indexpop()
zu entfernen, um es nach Index zu entfernen, wenn Sie den zurückgegebenen Wert benötigen, undremove()
um ein Element nach Wert zu löschen. Letzteres erfordert das Durchsuchen der Liste und wird ausgelöst,ValueError
wenn in der Liste kein solcher Wert vorkommt.Beim Löschen eines Index
i
aus einer Liste vonn
Elementen sind die rechnerischen Komplexitäten dieser Methodenquelle
del
etwas schneller ist, aber aus einem anderen Grund: Die Suche nach__delitem__
einem in C implementierten Typ erfolgt eher nach Index als nach Name, währendpop
nach dem gesamten Deskriptorprotokoll gesucht werden muss. Die Ausführung der Funktionen selbst sollte genauso lange dauern. Beide geben einen Zeiger zurück - einen auf das entfernte Objekt, den anderen aufNone
.Da dies von niemand anderem erwähnt wurde, ist zu beachten, dass
del
(im Gegensatz zupop
) das Entfernen einer Reihe von Indizes aufgrund von Listenaufteilung möglich ist:Dies ermöglicht auch die Vermeidung von a,
IndexError
wenn der Index nicht in der Liste enthalten ist:quelle
Schon ganz gut von anderen beantwortet. Dieser von meinem Ende :)
Offensichtlich
pop
ist es das einzige, das den Wert zurückgibt, und esremove
ist das einzige, das das Objekt durchsucht, während esdel
sich auf ein einfaches Löschen beschränkt.quelle
Viele beste Erklärungen sind hier, aber ich werde mein Bestes geben, um mehr zu vereinfachen.
Unter all diesen Methoden sind Reverse & Pop Postfix, während Delete das Präfix ist .
remove (): Dient zum Entfernen des ersten Auftretens eines Elements
remove(i)
=> erstes Auftreten des i-Wertespop (): Dient zum Entfernen von Elementen, wenn:
nicht spezifiziert
pop()
=> vom Ende der Listespezifizierten
pop(index)
=> des IndexWARNUNG: Gefährliche Methode voraus
delete () : Dies ist eine Präfixmethode.
Behalten Sie zwei verschiedene Syntax für dieselbe Methode im Auge: [] und (). Es besitzt die Macht:
1. Index löschen
del a[index]
=> wird verwendet, um den Index und den zugehörigen Wert genau wie pop zu löschen.2. Werte im Bereich löschen [Index 1: Index N]
del a[0:3]
=> mehrere Werte im Bereich3.Letzte, aber keine Liste, um die gesamte Liste auf einmal zu löschen
del (a)
=> wie oben gesagt.Hoffe, dies klärt die Verwirrung, wenn überhaupt.
quelle
pop - Nimmt den Index und gibt den Wert zurück
remove - Nimmt den Wert an, entfernt das erste Vorkommen und gibt nichts zurück
delete - Nimmt den Index, entfernt den Wert an diesem Index und gibt nichts zurück
quelle
Jede Operation / Funktion für verschiedene Datenstrukturen ist für bestimmte Aktionen definiert. Hier in Ihrem Fall dh ein Element entfernen, löschen, Pop und entfernen. (Wenn Sie Sätze in Betracht ziehen, fügen Sie eine weitere Operation hinzu - verwerfen Sie) Ein anderer verwirrender Fall ist beim Hinzufügen. Einfügen / Anhängen. Lassen Sie uns zur Demonstration deque implementieren. deque ist eine hybride lineare Datenstruktur, in der Sie Elemente an beiden Enden hinzufügen / entfernen können. (Hinteres und vorderes Ende)
Hier sehen Sie die Operationen:
Operationen müssen etwas zurückgeben. Also, Pop - Mit und ohne Index. Wenn ich den Wert nicht zurückgeben möchte: del self.items [0]
Löschen nach Wert nicht Index:
entfernen :
Rückgabe [1,3,5,7]
Betrachten wir den Fall von Mengen.
quelle
Während Pop und Delete beide Indizes verwenden, um ein Element zu entfernen, wie in den obigen Kommentaren angegeben. Ein wesentlicher Unterschied ist die zeitliche Komplexität für sie. Die zeitliche Komplexität für pop () ohne Index ist O (1), ist jedoch nicht der gleiche Fall für das Löschen des letzten Elements.
Wenn Ihr Anwendungsfall immer darin besteht, das letzte Element zu löschen, ist es immer vorzuziehen, pop () gegenüber delete () zu verwenden. Weitere Erläuterungen zu Zeitkomplexitäten finden Sie unter https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt
quelle
delete
. Die Unterschiede bestehen darin, dasspop
der Wert zurückgegeben wird und dass diesdel
für Slices funktioniert. In Fällen, in denenpop
funktioniert,del
hat genau die gleiche Rechenkomplexität (und ist durch einen konstanten Term etwas schneller).Der Entfernungsvorgang für eine Liste erhält einen zu entfernenden Wert. Es durchsucht die Liste nach einem Element mit diesem Wert und löscht das erste übereinstimmende Element, das es findet. Es ist ein Fehler, wenn kein übereinstimmendes Element vorhanden ist, und löst einen ValueError aus .
Mit der del- Anweisung kann eine gesamte Liste gelöscht werden. Wenn Sie ein bestimmtes Listenelement als Argument für del haben (z. B. Listenname [7], um speziell auf das 8. Element in der Liste zu verweisen), wird dieses Element einfach gelöscht. Es ist sogar möglich, ein "Slice" aus einer Liste zu löschen. Es ist ein Fehler, wenn der Index außerhalb des Bereichs liegt und einen IndexError auslöst .
Die übliche Verwendung von Pop besteht darin, das letzte Element aus einer Liste zu löschen, während Sie die Liste als Stapel verwenden. Im Gegensatz zu del gibt pop den Wert zurück, den es aus der Liste entfernt hat. Sie können Pop und Pop optional einen anderen Indexwert als das Ende der Liste zuweisen (z. B. listname.pop (0) löscht das erste Element aus der Liste und gibt das erste Element als Ergebnis zurück). Sie können dies verwenden, damit sich die Liste wie eine Warteschlange verhält. Es stehen jedoch Bibliotheksroutinen zur Verfügung, mit denen Warteschlangenoperationen eine bessere Leistung erzielen können als pop (0). Es ist ein Fehler, wenn der Index außerhalb des Bereichs liegt und einen IndexError auslöst .
Weitere Informationen finden Sie unter collection.deque .
quelle
Entfernen funktioniert grundsätzlich am Wert. Löschen und Pop-Arbeiten am Index
Entfernen entfernt im Grunde den ersten übereinstimmenden Wert. Löschen löscht das Element aus einem bestimmten Index. Pop nimmt grundsätzlich einen Index und gibt den Wert an diesem Index zurück. Wenn Sie das nächste Mal die Liste drucken, wird der Wert nicht angezeigt.
quelle
Sie können auch entfernen verwenden, um einen Wert auch nach Index zu entfernen.
n würde sich dann auf [1, 5] beziehen
quelle
n = [5, 3, 5]
dannn.remove(n[2])
.n.remove(n[2])
entferntn[0]
, nichtn[2]
. Es ist also nicht nur lineare Zeit ohne Grund (vielleicht keine große Sache, wenn N = 3), es ist auch falsch (eine große Sache, egal was N ist)