Vraag Verschil tussen del, remove en pop op lijsten


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

Is er een verschil tussen de bovenstaande drie methoden om een ​​element uit een lijst te verwijderen?


405
2017-07-17 10:21


oorsprong


antwoorden:


Ja, remove verwijdert de eerste bij elkaar passen waarde, geen specifieke index:

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

del verwijdert het item bij een specifieke index:

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

en pop verwijdert het item bij een specifieke index en retourneert het.

>>> a = [4, 3, 5]
>>> a.pop(1)
3
>>> a
[4, 5]

Hun foutmodi zijn ook anders:

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

587
2017-07-17 10:24



Gebruik del om een ​​element per index te verwijderen, pop() om het per index te verwijderen als u de geretourneerde waarde nodig hebt, en remove() om een ​​element op waarde te verwijderen. Dit laatste vereist het doorzoeken van de lijst en verhoogt ValueError als zo'n waarde niet voorkomt in de lijst.

Bij het verwijderen van de index i uit een lijst van n elementen, de computationele complexiteit van deze methoden zijn

del     O(n - i)
pop     O(n - i)
remove  O(n)

88
2017-07-17 10:25



Aangezien niemand anders het heeft vermeld, merk dat op del (in tegenstelling tot pop) maakt het mogelijk een reeks indexen te verwijderen vanwege lijstselectie:

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

Dit maakt ook het vermijden van een IndexError als de index niet in de lijst staat:

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

35
2018-01-16 10:27



Al goed beantwoord door anderen. Deze van mijn einde :)

remove vs pop vs del

blijkbaar pop is de enige die de waarde retourneert, en remove is de enige die het object doorzoekt, terwijl del beperkt zich tot een eenvoudige verwijdering.


25
2017-08-08 15:33



pop - Neemt Index en retourneert Waarde

remove - neemt waarde, verwijdert eerste occurrence en retourneert niets

delete - Neemt index, verwijdert de waarde bij die index en retourneert niets


8
2018-02-07 06:51



Terwijl pop en delete beide indexen gebruiken om een ​​element te verwijderen zoals vermeld in bovenstaande opmerkingen. Een belangrijk verschil is de tijdcomplexiteit voor hen. De tijdcomplexiteit voor pop () zonder index is O (1) maar is niet hetzelfde voor het verwijderen van het laatste element.

Als u altijd het laatste element wilt verwijderen, heeft het altijd de voorkeur om pop () te gebruiken in plaats van verwijderen (). Voor meer uitleg over tijdcomplexiteiten, kunt u verwijzen naar https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt 


1
2017-09-04 20:22



Elke bewerking / functie op verschillende datastructuren is gedefinieerd voor bepaalde acties. Hier in uw geval, d.w.z. een element verwijderen, verwijderen, poppen en verwijderen. (Als u sets beschouwt, voegt u nog een bewerking toe - weggooien) Andere verwarrende zaak is tijdens het toevoegen. Plaats / Append. Laat Demonstratie voor de demonstratie uitvoeren. deque is een hybride lineaire gegevensstructuur, waarin u elementen kunt toevoegen / elementen aan beide uiteinden kunt verwijderen (achterste en vooreinden)

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[:]

Hierin, zie de operaties:

def deleteFront(self):

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

Operaties moeten iets teruggeven. Dus, pop - Met en zonder een index. Als ik de waarde niet wil retourneren: del self.items [0]

Wissen op waarde niet Index:

  • verwijder:

    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
    

Retouren [1,3,5,7]

laten we eens kijken naar het geval van sets.

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
2017-07-10 17:29



U kunt ook verwijderen gebruiken om een ​​waarde ook op index te verwijderen.

n = [1, 3, 5]

n.remove(n[1])

n zou dan verwijzen naar [1, 5]


-3
2017-10-16 00:41