it-swarm.com.de

Unterschied zwischen del, remove und pop auf den Listen

>>> a=[1,2,3]
>>> a.remove(2)
>>> a
[1, 3]
>>> a=[1,2,3]
>>> del a[1]
>>> a
[1, 3]
>>> a= [1,2,3]
>>> a.pop(1)
2
>>> a
[1, 3]
>>> 

Gibt es einen Unterschied zwischen den obigen drei Methoden, um ein Element aus einer Liste zu entfernen?

565
sachin irukula

Ja, remove entfernt den ersten passenden Wert nicht einen bestimmten Index:

>>> a = [0, 2, 3, 2]
>>> a.remove(2)
>>> a
[0, 3, 2]

del entfernt das Element an einem bestimmten Index:

>>> a = [3, 2, 2, 1]
>>> del a[1]
>>> a
[3, 2, 1]

und pop entfernt 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 auch unterschiedlich:

>>> a = [4, 5, 6]
>>> a.remove(7)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in 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
817
Martijn Pieters

Verwenden Sie del, um ein Element nach Index zu entfernen, pop(), 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 löst ValueError aus, wenn ein solcher Wert nicht in der Liste enthalten ist.

Wenn Sie den Index i aus einer Liste von n-Elementen löschen, werden die rechnerischen Komplexitäten dieser Methoden berücksichtigt

del     O(n - i)
pop     O(n - i)
remove  O(n)
115
Sven Marnach

Beachten Sie, dass del (im Gegensatz zu pop) das Entfernen eines Indexbereichs aufgrund der Aufteilung in Listen erlaubt:

>>> lst = [3, 2, 2, 1]
>>> del lst[1:]
>>> lst
[3]

Dadurch kann auch eine IndexError vermieden werden, wenn der Index nicht in der Liste enthalten ist:

>>> lst = [3, 2, 2, 1]
>>> del lst[10:]
>>> lst
[3, 2, 2, 1]
57
Chris_Rands

Bereits von anderen gut beantwortet. Dieser von meinem Ende :)

 remove vs pop vs del

Offensichtlich gibt pop den einzigen Wert zurück, und remove ist der einzige, der das Objekt durchsucht, während del sich auf ein einfaches Löschen beschränkt. 

34
Saurav Sahu

pop - Übernimmt den Index und gibt den Wert zurück

remove - Übernimmt den Wert, entfernt das erste Vorkommen und gibt nichts zurück 

delete - Übernimmt den Index, entfernt den Wert an diesem Index und gibt nichts zurück

12
Bahubali Patil

Es gibt viele beste Erklärungen, aber ich werde mich bemühen, mehr zu vereinfachen.

Unter allen diesen Methoden sind reverse & pop postfix , während delete prefix ist.

remove (): Wird verwendet, um das erste Vorkommen eines Elements zu entfernen

remove(i) => erstes Auftreten von i-Wert 

>>> 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 (): Wird verwendet, um ein Element zu entfernen, wenn:

nicht spezifiziert 

pop() => vom Ende der Liste

>>>a.pop()
>>>a
[0, 3, 2, 1, 4, 6, 5]

spezifizierten 

pop(index) => des Indexes

>>>a.pop(2)
>>>a
[0, 3, 1, 4, 6, 5]

WARNUNG: Gefährliche Methode voraus

delete () : Es ist eine Präfixmethode. 

Behalten Sie zwei unterschiedliche Syntax für dieselbe Methode im Auge: [] und (). Es besitzt die Macht zu:

1.Löschen Index 

del a[index] => wird verwendet, um den Index und den zugehörigen Wert zu löschen, genau wie bei pop.

>>>del a[1]
>>>a
[0, 1, 4, 6, 5]

2.Löschwerte im Bereich [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 

del (a) => wie oben gesagt.

>>>del (a)
>>>a

Hoffe, das klärt die Verwirrung, wenn es welche gibt.

3
Mayur Patil

Jede Operation/Funktion für verschiedene Datenstrukturen wird für bestimmte Aktionen definiert. Hier in Ihrem Fall, d. H. Ein Element entfernen, löschen, aufklappen und entfernen. (Wenn Sie Mengen in Betracht ziehen, fügen Sie einen weiteren Vorgang hinzu - Discard). Einfügen/Anhängen. Lassen Sie uns zur Demonstration deque implementieren. deque ist eine hybride lineare Datenstruktur, in der Sie an beiden Enden Elemente hinzufügen bzw. Elemente entfernen können. (Hintere und vordere Enden) 

class Deque(object):

  def __init__(self):

    self.items=[]

  def addFront(self,item):

    return self.items.insert(0,item)
  def addRear(self,item):

    return self.items.append(item)
  def deleteFront(self):

    return self.items.pop(0)
  def deleteRear(self):
    return self.items.pop()
  def returnAll(self):

    return self.items[:]

Hier sehen Sie die Operationen:

def deleteFront(self):

    return self.items.pop(0)
def deleteRear(self):
    return self.items.pop()

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: 

  • löschen : 

    list_ez=[1,2,3,4,5,6,7,8]
    for i in list_ez:
        if i%2==0:
            list_ez.remove(i)
    print list_ez
    

Rückgabe [1,3,5,7]

lassen Sie uns den Fall von Mengen betrachten.

set_ez=set_ez=set(range(10))

set_ez.remove(11)

# Gives Key Value Error. 
##KeyError: 11

set_ez.discard(11)

# Does Not return any errors.
1
phanindravarma

Während Pop und Delete beide nehmen, nehmen Sie Indizes, 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 derselbe Fall für das Löschen des letzten Elements.

Wenn Ihr Anwendungsfall immer das letzte Element löschen soll, ist es vorzuziehen, pop () über delete () zu verwenden. Weitere Erläuterungen zu zeitlichen Komplexitäten finden Sie unter https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt

0
skashyap

Die Operation remove einer Liste erhält einen zu entfernenden Wert. Er durchsucht die Liste nach einem Element mit diesem Wert und löscht das erste übereinstimmende Element, das er findet. Es ist ein Fehler, wenn kein übereinstimmendes Element vorhanden ist, ein ValueError .

>>> 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

Die Anweisung del kann zum Löschen einer gesamten Liste verwendet werden. Wenn Sie ein bestimmtes Listenelement als Argument für del verwenden (z. B. Listenname [7], um spezifisch 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 gültigen Bereichs liegt, ein IndexError ausgelöst wird.

>>> 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 ist das Löschen des letzten Elements aus einer Liste, wenn Sie die Liste als Stapel verwenden. Im Gegensatz zu del gibt pop den Wert zurück, den es aus der Liste gezogen hat. Sie können optional einen Indexwert für pop und pop von einem anderen als dem Ende der Liste angeben (z. B. listenname.pop (0) löscht das erste Element aus der Liste und gibt das erste Element als Ergebnis zurück). Sie können dies verwenden, um die Liste wie eine Warteschlange zu verhalten, aber es gibt Bibliotheksroutinen, die Warteschlangenoperationen mit einer besseren Leistung als Pop (0) bieten. Es ist ein Fehler, wenn der Index außerhalb des gültigen Bereichs liegt, ein IndexError ausgelöst wird.

>>> 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

Siehe Collections.deque für weitere Details.

0