Verschil tussen del, verwijder en pop op lijsten

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


Antwoord 1, autoriteit 100%

De effecten van de drie verschillende methoden om een element uit een lijst te verwijderen:

removeverwijdert de eersteovereenkomende waarde, niet een specifieke index:

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

delverwijdert het item bij een specifieke index:

>>> a = [9, 8, 7, 6]
>>> del a[1]
>>> a
[9, 7, 6]

en popverwijdert het item bij een specifieke index en geeft het terug.

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

Antwoord 2, autoriteit 15%

Gebruik delom een element per index te verwijderen, pop()om het per index te verwijderen als je de geretourneerde waarde nodig hebt, en remove()om een element op waarde te verwijderen. De laatste vereist het doorzoeken van de lijst en verhoogt ValueErrorals een dergelijke waarde niet in de lijst voorkomt.

Bij het verwijderen van index iuit een lijst van nelementen, zijn de rekenkundige complexiteit van deze methoden

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

Antwoord 3, autoriteit 7%

Aangezien niemand anders het heeft genoemd, moet u er rekening mee houden dat del(in tegenstelling tot pop) het verwijderen van een reeks indexen toestaat vanwege list slicing:

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

Hierdoor kan ook een IndexErrorworden vermeden als de index niet in de lijst staat:

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

Antwoord 4, autoriteit 4%

Al behoorlijk goed beantwoord door anderen. Deze van mijn kant 🙂

verwijder vs pop vs del

Het is duidelijk dat popde enige is die de waarde retourneert, en removede enige is die het object doorzoekt, terwijl delgrenzen zichzelf tot een eenvoudige verwijdering.


Antwoord 5, autoriteit 2%

Veel beste verklaringen zijn hier, maar ik zal mijn best doen om meer te vereenvoudigen.

Van al deze methoden, verwijder & pop zijn postfixterwijl verwijderen prefixis.

remove():Het werd gebruikt om het eerste voorkomen van een element te verwijderen

remove(i)=> eerste keer dat de i-waarde voorkomt

>>> 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():Het werd gebruikt om elementen te verwijderen als:

niet gespecificeerd

pop()=> vanaf einde van lijst

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

gespecificeerd

pop(index)=> van index

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

WAARSCHUWING: gevaarlijke methode vooruit

delete(): het is een prefixmethode.

Houd twee verschillende syntaxis in de gaten voor dezelfde methode: [] en (). Het heeft de macht om:

1.Verwijder index

del a[index]=> gebruikt om index en de bijbehorende waarde te verwijderen, net als pop.

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

2.Verwijder waarden in bereik [index 1:index N]

del a[0:3]=> meerdere waarden binnen bereik

>>>del a[0:3]
>>>a
[6, 5]

3.Laatste maar niet lijst, om de hele lijst in één keer te verwijderen

del (a)=> zoals hierboven gezegd.

>>>del (a)
>>>a

Ik hoop dat dit de eventuele verwarring verduidelijkt.


Antwoord 6

pop

Neemt index (indien gegeven, anders laatste), verwijdert waarde bij die index en retourneert waarde

verwijder

Neemt waarde, verwijdert eerste instantie en retourneert niets

verwijderen

Neemt index, verwijdert waarde bij die index en retourneert niets


Antwoord 7

Elke bewerking/functie op verschillende datastructuren is gedefinieerd voor bepaalde acties. Hier in jouw geval, d.w.z. een element verwijderen, verwijderen, Pop en verwijderen. (Als u sets overweegt, voegt u nog een bewerking toe – weggooien)
Een ander verwarrend geval is tijdens het toevoegen. Invoegen/toevoegen.
Laten we voor demonstratie deque implementeren. deque is een hybride lineaire datastructuur, waar je aan beide uiteinden elementen kunt toevoegen/verwijderen. (Achter- en voorkant)

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

Bekijk hier de bewerkingen:

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

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

Verwijderen 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
    

Retourneert [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.

Antwoord 8

Hier is een gedetailleerd antwoord.

del kan voor elk klasseobject worden gebruikt, terwijl pop en remove en beperkt tot specifieke klassen.

Voor del

Hier zijn enkele voorbeelden

>>> a = 5
>>> b = "this is string"
>>> c = 1.432
>>> d = myClass()
>>> del c
>>> del a, b, d   # we can use comma separated objects

We kunnen de __del__methode overschrijven in door de gebruiker gemaakte klassen.

Specifiek gebruik met lijst

>>> a = [1, 4, 2, 4, 12, 3, 0]
>>> del a[4]
>>> a
[1, 4, 2, 4, 3, 0]
>>> del a[1: 3]   # we can also use slicing for deleting range of indices
>>> a
[1, 4, 3, 0]

Voor pop

popneemt de index als parameter en verwijdert het element bij die index

In tegenstelling tot del, retourneert popwanneer het lijstobject wordt aangeroepen de waarde bij die index

>>> a = [1, 5, 3, 4, 7, 8]
>>> a.pop(3)  # Will return the value at index 3
4
>>> a
[1, 5, 3, 7, 8]

Voor remove

verwijder neemt de parameterwaarde en verwijder die waarde uit de lijst.

Als er meerdere waarden aanwezig zijn, wordt de eerste instantie verwijderd

Note: Zal ValueError genereren als die waarde niet aanwezig is

>>> a = [1, 5, 3, 4, 2, 7, 5]
>>> a.remove(5)  # removes first occurence of 5
>>> a
[1, 3, 4, 2, 7, 5]
>>> a.remove(5)
>>> a
[1, 3, 4, 2, 7]

Ik hoop dat dit antwoord nuttig is.


Antwoord 9

Terwijl pop en delete beide indices nemen om een element te verwijderen zoals vermeld in bovenstaande opmerkingen. Een belangrijk verschil is de tijdscomplexiteit voor hen. De tijdscomplexiteit 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() boven delete() te gebruiken. Voor meer uitleg over tijdscomplexiteit kunt u verwijzen naar https:/ /www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt


Antwoord 10

De verwijder-bewerking op een lijst is een waarde gegeven om te verwijderen. Het doorzoekt de lijst om een item met die waarde te vinden en verwijdert het eerste overeenkomende item dat het vindt. Het is een fout als er geen overeenkomend item is, genereert een 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

De del-instructie kan worden gebruikt om een hele lijst verwijderen. Als je een specifiek lijstitem als argument voor del hebt (bijvoorbeeld lijstnaam [7] om specifiek naar het 8e item in de lijst te verwijzen), wordt dat item gewoon verwijderd. Het is zelfs mogelijk om een “slice” uit een lijst te verwijderen. Het is een fout als de index buiten bereik is, een IndexErroroplevert .

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

Het gebruikelijke gebruik van popis om verwijder het laatste item uit een lijst terwijl u de lijst als stapel gebruikt. In tegenstelling tot del retourneert pop de waarde die het uit de lijst heeft gehaald. U kunt optioneel een indexwaarde geven aan pop en pop van een ander dan het einde van de lijst (bijv. listname.pop(0) zal het eerste item uit de lijst verwijderen en dat eerste item als resultaat retourneren). U kunt dit gebruiken om de lijst zich als een wachtrij te laten gedragen, maar er zijn bibliotheekroutines beschikbaar die wachtrijbewerkingen beter kunnen laten presteren dan pop(0). Het is een fout als de index buiten bereik is, een IndexErroroplevert .

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

Zie collections.dequevoor meer details.


Antwoord 11

Remove werkt in principe op de waarde .
Verwijder en pop werk op de index

Verwijderen verwijdert in feite de eerste overeenkomende waarde.
Verwijderen verwijdert het item uit een specifieke index
Pop neemt in feite een index en retourneert de waarde bij die index. De volgende keer dat u de lijst afdrukt, wordt de waarde niet weergegeven.

Voorbeeld:


Antwoord 12

U kunt ook remove gebruiken om een waarde per index te verwijderen.

n = [1, 3, 5]
n.remove(n[1])

n zou dan verwijzen naar [1, 5]

Other episodes