Python Lijst pop()

Deze tutorial laat je alles zien wat je moet weten om de essentiële pop() methode van het meest fundamentele container datatype in de Python programmeertaal onder de knie te krijgen.

Definitie en gebruik:

De list.pop() methode verwijdert en retourneert het laatste element van een bestaande list. De list.pop(index) methode met het optionele argument index verwijdert en retourneert het element op de positie index.

Hier volgt een kort voorbeeld:

>>> lst = >>> lst.pop()3>>> lst

In de eerste regel van het voorbeeld maakt u de lijst lst. Vervolgens verwijder je het laatste element 3 uit de lijst en geeft het terug. Het resultaat is een lijst met slechts twee elementen .

Code Puzzle – Probeer het zelf:

Nu kent u de basis. Laten we uw begrip verdiepen met een korte codepuzzel – kunt u hem oplossen?

U kunt deze puzzel ook oplossen en uw Python-vaardigheden bijhouden op onze interactieve Finxter-app.

Syntax:

U kunt deze methode aanroepen op elk lijstobject in Python. Dit is de syntaxis:

list.pop(index=-1)

Argumenten:

Argument Omschrijving
index Optioneel argument. U kunt de index definiëren van het element dat moet worden verwijderd en teruggegeven. Het standaardargument leidt tot het verwijderen van het laatste lijstelement met index -1.

Return-waarde:

De methode list.pop() heeft als returnwaarde Object. Het verwijdert het specifieke element uit de lijst (standaard: het laatste element) en retourneert het direct aan de aanroeper.

Video:

  • De ultieme gids voor Python-lijsten

Hier is uw gratis PDF-spiekbriefje met alle Python-lijstmethoden op één eenvoudige pagina. Klik op de afbeelding om het PDF-bestand met hoge resolutie te downloaden, af te drukken en op te hangen aan de muur van je kantoor:

Inhoudsopgave

Python Lijst pop() per Index

Je kunt de methode list.pop(index) met het optionele index-argument gebruiken om het element op positie index uit de lijst te verwijderen en terug te geven.

Hier volgt een voorbeeld:

>>> customers = >>> customers.pop(2)'Ann'>>> customers>>> customers.pop(0)'Alice'>>> customers

Na het maken van de lijst met vier elementen, verwijdert u eerst het tweede element 'Ann' en retourneert dit. Vervolgens verwijdert u het eerste element 'Alice' en geeft u het terug. De resulterende lijst heeft nog maar twee elementen over.

Python Lijst pop() Eerste / Voor / Links / Kop

De list.pop(index) methode om met het optionele index argument om het element op positie index uit de lijst te verwijderen en terug te geven. Dus als u het eerste element uit de lijst wilt verwijderen, stelt u eenvoudigweg index=0 in door list.pop(0) aan te roepen. Dit zal het eerste element uit de lijst halen.

Hier volgt een voorbeeld:

>>> primes = >>> primes.pop(0)1>>> primes

De pop(0) methode verwijdert het eerste element 1 uit de lijst van priemgetallen die in het voorbeeld wordt gegeven.

Python Lijst pop() op waarde

In de vorige twee voorbeelden heb je gezien hoe je elementen op index kunt poppen. Maar kun je ook op waarde poppen?

Ja, dat kun je door de list.index(value) methode te gebruiken die je de index van de elementwaarde in de lijst geeft. Nu kun je de list.pop(index) methode op deze index gebruiken om de waarde uit de lijst te verwijderen en het resultaat als retourwaarde te krijgen.

Hier volgt een voorbeeld waarbij je het element 7 uit de lijst wilt halen en het resultaat in de variabele some_prime wilt opslaan.

>>> primes = >>> some_prime = primes.pop(primes.index(7))>>> some_prime7

Als u niet geïnteresseerd bent in de retourwaarde, maar alleen het eerste voorkomen van de waarde x in de list wilt verwijderen, gebruik dan de methode list.remove(x).

Gerelateerd artikel:

  • Python Lijst verwijderen()

Python Lijst pop() Meerdere elementen

Als je één element uit een Python-lijst kunt poppen, is de natuurlijke vraag of je ook meerdere elementen tegelijk kunt poppen?

Het antwoord is nee. Je kunt niet direct meerdere elementen uit een lijst halen. Maar je kunt het indirect doen met een eenvoudig list comprehension statement.

Python Lijst pop() Eerste n elementen

Stel, je wilt de eerste n elementen uit een lijst poppen. Hoe doe je dat?

Je maakt gewoon een lijst van waarden met behulp van list comprehension om de eerste n elementen van de lijst te verwijderen en terug te geven.

Hier is nog een voorbeeld:

>>> lst = >>> popped = >>> popped>>> lst

De gepopte lijst bevat de eerste vijf elementen. De oorspronkelijke lijst heeft nog maar één element.

Python Lijst pop() Laatste n elementen

Stel, je wilt de laatste n elementen uit een lijst poppen. Hoe doe je dat?

Je maakt gewoon een lijst van waarden met behulp van list comprehension om de laatste n elementen van de lijst te verwijderen en terug te geven.

Hier is nog een voorbeeld:

>>> lst = >>> >>> lst

De gepopte lijst bevat de laatste vijf elementen. De oorspronkelijke lijst heeft nog maar één element.

Python Lijst pop() Tijdcomplexiteit

De tijdcomplexiteit van de pop() methode is constant O(1). Het maakt niet uit hoeveel elementen er in de lijst staan, een element uit een lijst poppen kost evenveel tijd (plus minus constante factoren).

De reden hiervoor is dat lijsten in cPython zijn geïmplementeerd met arrays. Het ophalen van een element uit een array heeft een constante complexiteit. Het verwijderen van het element uit de array heeft ook een constante complexiteit. Dus, het ophalen en verwijderen van het element zoals gedaan door de pop() methode heeft ook een constante runtime complexiteit.

Ik heb een kort script geschreven om de runtime complexiteit van de pop() methode in Python te evalueren:

import matplotlib.pyplot as pltimport timey = for i in : lst = list(range(i)) t0 = time.time() x = lst.pop(0) t1 = time.time() y.append(t1-t0)plt.plot(y)plt.xlabel("List elements (10**5)")plt.ylabel("Time (sec)")plt.show()

De resulterende plot laat zien dat de runtime complexiteit lineair is, zelfs als het aantal elementen drastisch toeneemt:

Runtimecomplexiteit Python pop()

(Oké, er zijn wat hobbels, maar wie maalt daar nu echt om?)

Merk op dat de runtime complexiteit nog steeds lineair is als we het laatste element of een ander willekeurig element uit de lijst poppen.

Python Lijst pop() vs remove()

Wat is het verschil tussen de list.pop() en de list.remove() methoden?

  • De list.remove(element) methode verwijdert het eerste voorkomen van de element uit een bestaande list. Het verwijdert echter niet alle voorkomens van het element in de lijst!
  • De list.pop() methode verwijdert en retourneert het laatste element uit een bestaande list. De list.pop(index) methode met het optionele argument index verwijdert en retourneert het element op de positie index.

Dus, de remove methode verwijdert op waarde en de pop methode verwijdert op index. Ook retourneert de remove methode niets (het werkt op de lijst zelf) en de pop methode retourneert het verwijderde object.

Python Lijst Pop en Push (Stack)

Python heeft geen ingebouwde stack datastructuur omdat het niet nodig is. Je kunt gewoon een lege lijst maken en die stack noemen. Dan gebruik je de methode stack.append(x) om element x naar de stack te duwen. En je gebruikt de methode stack.pop() om het bovenste element van de stack te duwen.

Hier volgt een voorbeeld dat laat zien hoe je drie waarden naar de stack duwt en ze vervolgens verwijdert in de traditionele First-In Last-Out (FILO) volgorde van stacks.

>>> stack = >>> stack.append(5)>>> stack.append(42)>>> stack.append("Ann")>>> stack.pop()'Ann'>>> stack.pop()42>>> stack.pop()5>>> stack

Python Lijst pop() Zonder Verwijderen

Wil je pop() een element uit een gegeven lijst halen zonder het te verwijderen? Doe het dan niet! Gebruik in plaats daarvan eenvoudige indexering. Om een element met index i uit list te halen, gebruikt u eenvoudig indexeringsschema list. Hierdoor blijft het oorspronkelijke element in de lijst zonder het te verwijderen.

Python Lijst pop() If Not Empty

Hoe kun je pop() een element alleen als de lijst niet leeg is in een enkele regel code? Gebruik de ternaire operator in Python lst.pop() if lst else None als volgt:

>>> lst = >>> for i in range(5):print(lst.pop() if lst else None)321NoneNone

Je probeert het meest linkse element vijf keer te poppen uit een lijst met slechts drie waarden. Er komt echter geen foutmelding omdat je vakkundig gebruik maakt van de ternaire operator die in één regel controleert of de lijst leeg is. Als de lijst leeg is, verschijnt er geen pop maar wordt de None waarde teruggegeven.

Als je in dit voorbeeld de ternaire operator niet gebruikt, gooit Python een IndexError als je van een lege lijst probeert te poppen:

>>> lst = >>> for i in range(5):print(lst.pop())321Traceback (most recent call last): File "<pyshell#15>", line 2, in <module> print(lst.pop())IndexError: pop from empty list

Python Lijst pop() Slice

Kan je een hele slice in een keer poppen? Wel, je kunt een hele slice verwijderen door het del keyword te gebruiken: om slice lst uit de lijst te verwijderen, kun je del lst aanroepen. Je krijgt de slice echter niet als retourwaarde, dus je wilt de slice misschien eerst in een aparte variabele opslaan, voordat je hem uit de lijst verwijdert.

Python List pop() While Iterating

Het is altijd gevaarlijk om een lijst te veranderen waarover je op dat moment itereert.

Waarom? Omdat de iterator maar één keer wordt gemaakt in de lusdefinitie en het zal je hardnekkig de indices geven die het in het begin heeft voorbereid. Als de lus verandert, veranderen de indexen van de elementen ook. Maar de iterator past de indexen niet aan om met die veranderingen rekening te houden. Hier is een voorbeeld:

>>> lst = list(range(10))>>> for i in range(len(lst)):lst.pop(i)02468Traceback (most recent call last): File "<pyshell#20>", line 2, in <module> lst.pop(i)IndexError: pop index out of range

Wow-dit was onverwacht, nietwaar? Je popt alleen elk tweede element uit de lijst. Waarom? Omdat in de eerste iteratie, de index variabele i=0. Nu, verwijderen we dit uit de lijst. Het element 1 in de lijst heeft nu index 0 na verwijdering van het vorige leidende element. Maar in de tweede lus iteratie, heeft de lus variabele index i=1. Dit is het volgende element dat gepopt moet worden. Maar je hebt het popping van element 1 uit de lijst op positie index 0 overgeslagen! Alleen elk ander element wordt als resultaat gepopt.

Alternatieve manieren om elementen uit een lijst te verwijderen

Er zijn een aantal alternatieve manieren om elementen uit de lijst te verwijderen. Zie de overzichtstabel:

Method Omschrijving
lst.remove(x) Verwijder een element uit de lijst (op waarde)
lst.pop() Verwijder een element uit de lijst (op index) en geef het element terug
lst.clear() Verwijder alle elementen uit de lijst
del lst Verwijder één of meer elementen uit de lijst (op index of slice)
Lijstbegrip Alle elementen verwijderen die aan een bepaalde voorwaarde voldoen

Volgende, duik je in elk van deze methoden om een diepgaand begrip te krijgen.

remove() – Een element op waarde verwijderen

Om een element uit de lijst te verwijderen, gebruikt u de list.remove(element) methode die u al eerder hebt gezien:

>>> lst = >>> lst.remove("Ann")>>> lst

Probeer het zelf maar eens:

De methode gaat van links naar rechts en verwijdert het eerste voorkomen van het element dat gelijk is aan het element dat moet worden verwijderd.

Verwijderd element bestaat niet

Als u element x uit de lijst probeert te verwijderen, maar x bestaat niet in de lijst, dan geeft Python een foutmelding bij Waarde:

>>> lst = >>> lst.remove('Frank')Traceback (most recent call last): File "<pyshell#19>", line 1, in <module> lst.remove('Frank')ValueError: list.remove(x): x not in list

pop() – Een element op index verwijderen

De methode pop() verwijdert standaard het laatste element uit de lijst en retourneert het element.

>>> lst = >>> lst.pop()'Ann'>>> lst

Maar u kunt ook het optionele index-argument definiëren. In dat geval verwijder je het element op de opgegeven index – een weinig bekend Python-geheim!

>>> lst = >>> lst.pop(1)'Bob'>>> lst

clear() – Alle elementen verwijderen

De clear() methode verwijdert eenvoudig alle elementen uit een gegeven lijstobject.

>>> lst = >>> lst.clear()>>> lst

del – Elements by Index or Slice verwijderen

Deze truc is ook relatief onbekend onder Python-beginners:

  • Gebruik del lst om het element op index te verwijderen.
  • Gebruik del lst om alle elementen in de slice te verwijderen.
>>> lst = list(range(10))>>> lst>>> del lst>>> lst>>> del lst>>> lst

Gerelateerde blogartikelen:

  • Bekijk mijn volledige slicing tutorial die je in 15 minuten of zo een meester slicer maakt!

Lijstbegrip – Elementen voorwaardelijk verwijderen

Okee, dit is een beetje valsspelen, want deze methode verwijdert niet echt elementen uit een lijstobject. Er wordt alleen een nieuwe lijst gemaakt met een aantal elementen die aan de voorwaarde voldoen.

List comprehension is een compacte manier om lijsten te maken. De eenvoudige formule is .

  • Expressie: Wat te doen met elk lijstelement?
  • Context: Welke lijstelementen moeten worden geselecteerd? Het bestaat uit een willekeurig aantal for en if statements.

Het voorbeeld creëert de lijst .

U kunt ook een voorwaarde definiëren zoals alle oneven waarden x%2==1 in het context gedeelte door een if voorwaarde te gebruiken. Dit leidt ons naar een manier om alle elementen die niet aan een bepaalde voorwaarde voldoen in een gegeven lijst te verwijderen.

>>> lst = list(range(10))>>> lst_new = >>> lst_new 

Terwijl je over de hele lijst itereert lst, vereist de voorwaarde x%2 dat de elementen oneven zijn.

Gerelateerde blogartikelen:

  • Bekijk mijn volledige tutorial over lijstbegrip voor een maximale leerervaring!

Python Lijst pop() Thread Safe

Heb je meerdere threads die tegelijkertijd je lijst benaderen? Dan moet je er zeker van zijn dat de lijstbewerkingen (zoals pop()) daadwerkelijk thread safe zijn.

Met andere woorden: kun je de pop()-bewerking in twee threads tegelijkertijd op dezelfde lijst aanroepen? (En kun je er zeker van zijn dat het resultaat zinvol is?)

Het antwoord is ja (als je de cPython-implementatie gebruikt). De reden is Python’s globale interpreter lock die ervoor zorgt dat een thread die op dat moment aan zijn code werkt, eerst zijn huidige basis Python operatie afmaakt zoals gedefinieerd door de cPython implementatie. Alleen als deze bewerking is voltooid, kan de volgende thread toegang krijgen tot de rekenhulpbron. Dit wordt gegarandeerd door een geavanceerd locking schema door de cPython implementatie.

Het enige dat je moet weten is dat elke basisoperatie in de cPython implementatie atomair is. Het wordt in zijn geheel en in een keer uitgevoerd voordat een andere thread de kans krijgt om op dezelfde virtuele engine te draaien. Daarom zijn er geen “race conditions”. Een voorbeeld van zo’n “race condition” zou het volgende zijn: de eerste thread leest een waarde van de lijst, de tweede thread overschrijft de waarde, en de eerste thread overschrijft de waarde weer, waardoor de operatie van de tweede thread ongeldig wordt.

Alle cPython operaties zijn thread-safe. Maar als je die operaties combineert tot functies op een hoger niveau, zijn die over het algemeen niet thread-safe, omdat ze bestaan uit vele (mogelijk interleaving) operaties.

Hoe nu verder?

De methode list.remove(element) verwijdert het eerste voorkomen van element uit de list.

Je hebt de ins en outs geleerd van deze belangrijke Python lijst methode.

Als je blijft worstelen met die basis Python commando’s en je voelt je vastlopen in je leervorderingen, dan heb ik iets voor je: Python One-Liners (Amazon Link).

In het boek geef ik je een grondig overzicht van cruciale computerwetenschappelijke onderwerpen zoals machine learning, reguliere expressie, data science, NumPy, en Python basics-alles in één regel Python code!

Haal het boek bij Amazon!

OFFICIËLE BOEKOMSCHRIJVING: Python One-Liners laat lezers zien hoe ze nuttige taken kunnen uitvoeren met één regel Python code. Na een korte Python opfrisser, behandelt het boek essentiële geavanceerde onderwerpen zoals slicing, list comprehension, broadcasting, lambda functies, algoritmes, reguliere expressies, neurale netwerken, logistische regressie en meer. Elk van de 50 boekdelen introduceert een probleem dat moet worden opgelost, leidt de lezer door de vaardigheden die nodig zijn om dat probleem op te lossen, en biedt vervolgens een beknopte one-liner Python-oplossing met een gedetailleerde uitleg.

Tijdens zijn werk als onderzoeker op het gebied van gedistribueerde systemen vond Dr. Christian Mayer zijn liefde voor het lesgeven aan studenten informatica.

Om studenten te helpen een hoger niveau van Python-succes te bereiken, richtte hij de programmeeronderwijswebsite Finxter.com op. Hij is auteur van het populaire programmeerboek Python One-Liners (NoStarch 2020), co-auteur van de Coffee Break Python-serie van zelfgepubliceerde boeken, liefhebber van informatica, freelancer, en eigenaar van een van de top 10 grootste Python-blogs wereldwijd.

Zijn passies zijn schrijven, lezen en coderen. Maar zijn grootste passie is aspirant-coders via Finxter van dienst te zijn en hen te helpen hun vaardigheden te verbeteren. Je kunt hier lid worden van zijn gratis e-mailacademie.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *