Items uit een Python-lijst verwijderen: de ultieme gids

Python-lijsten zijn behoorlijk flexibel, maar de beste manier vinden om dingen te verwijderen kan lastig zijn, vooral als je wilt dat je code schoon blijft en niet trager wordt. Of je nu items probeert te verwijderen op basis van een voorwaarde, hun index, of gewoon alles wilt wissen, er zijn verschillende trucs voor elk. Soms werkt het prima om gewoon een simpele methode te gebruiken, andere keren moet je wat bewuster te werk gaan. En eerlijk gezegd gedragen deze methoden zich in sommige configuraties vreemd, zoals het niet direct verwijderen van items of het genereren van fouten – je moet ze een beetje een zetje geven. Dus hier is een overzicht van de belangrijkste manieren om dit te doen, met een paar tips en waar je op moet letten.

Items uit een lijst verwijderen in Python

Methode 1 — Items verwijderen op basis van voorwaarden (geschikt voor het in één keer verwijderen van meerdere items)

Dit is waarschijnlijk de meest gebruikte truc. In plaats van items één voor één te verwijderen – want dat kan traag zijn – maak je een nieuwe lijst met alleen wat je wilt behouden. Lijstbegrip is hierbij je beste vriend. Ze zijn snel, minder foutgevoelig en vermijden de O(n²)-vertraging bij het verwijderen tijdens een iteratie. Je kunt het ook ter plekke doen door terug te wijzen naar de oorspronkelijke lijstsectie.

nums = [1, 2, 5, 4, 3, 5, 6] # Remove all 5s nums = [x for x in nums if x != 5] print(nums) # [1, 2, 4, 3, 6] # To modify in place (useful if others reference the same list) nums[:] = [x for x in nums if x != 5] 

Voor geneste lijsten kunt u de filtering als volgt afvlakken:

lists = [[1, 2, 3], [4, 5, 6]] # Filter inner lists for even numbers lists = [[x for x in inner if x % 2 == 0] for inner in lists] print(lists) # [[2], [4, 6]] 

Waarom het helpt? Omdat het één keer wordt uitgevoerd, in plaats van herhaaldelijk te verwijderen, wat de zaken kan vertragen. Bovendien is de kans kleiner dat je indices in de war raken.

Methode 2 — Verwijderen via index pop()met ofdel

Als je precies weet waar het element staat – bijvoorbeeld op index 2 – is het gebruik van pop()of deleenvoudig. Deze zijn handig als je iets van een specifieke plek wilt verwijderen zonder al te veel gedoe.

items = ["a", "b", "c", "d"] # Remove and get the item at index 2 removed = items.pop(2) print(removed) # "c" # Remove without returning anything at index 1 del items[1] print(items) # ["a", "c", "d"] 

Je kunt ook een slice targeten. Bijvoorbeeld door meerdere items tegelijk te verwijderen:

items = ["a", "b", "c", "d", "e"] del items[1:4] # removes "b", "c", "d" print(items) # ["a", "e"] 

@ Opmerking : Het verwijderen van slices gedraagt ​​zich soms wat vreemd als je niet voorzichtig bent, vooral bij negatieve indices of lege slices. Maar over het algemeen werkt het prima.

Methode 3 — Verwijder de eerste bewerkingswaarde metremove()

Als je alleen de waarde weet die je wilt verwijderen, remove()werkt het – maar alleen de eerste keer dat het die waarde vindt. Handig voor kleine lijsten of wanneer duplicaten er niet toe doen. Controleer eerst of de waarde bestaat, anders krijg je een ValueError.

names = ["Ada", "Linus", "Ada", "Guido"] names.remove("Ada") print(names) # ["Linus", "Ada", "Guido"] # Avoid errors if not present if "Grace" in names: names.remove("Grace") 

Waarom dit gebruiken? Omdat het eenvoudig en duidelijk is als je alleen de eerste match verwijdert.

Methode 4 — Maak de hele lijst leeg metclear()

Deze methode is perfect wanneer je alles wilt wissen, maar de lijstvariabele intact wilt houden. Het is netter dan het toewijzen van een lege lijst, vooral als andere delen van je code ernaar verwijzen.

records = [1, 2, 3] records.clear() print(records) # [] 

Als alternatief kunt u het volgende doen:

records[:] = [] 

Methode 5 – Tips voor veiligheid en snelheid

  • Doe dit soort riskante dingen niet:
# For x in items: # if should_delete(x): # items.remove(x) 

Hierdoor kunnen items worden overgeslagen of kan er onverwacht gedrag optreden, omdat het wijzigen van een lijst tijdens het doorlopen ervan onvoorspelbaar is.

  • Filter in plaats daarvan als een professional:
  • items = [x for x in items if not should_delete(x)] 

    Veel sneller en veiliger, vooral voor grote lijsten.

  • Als je de positie weet, gebruik dan:
  • last_item = data.pop() # Removes and returns last item quickly 

    Snel overzicht: welke methode past?

    • [x for x in seq if keep(x)]— Voor het op basis van de toestand verwijderen van grote hoeveelheden items.
    • seq.pop(i)— Kom langs bij de index, het artikel kan worden geretourneerd.
    • del seq[i]— Verwijderen per index, zonder terug te keren, gelijke plakjes.
    • seq.remove(value)— Alleen de eerste wedstrijd, wees voorbereid op fouten als deze mislukt.
    • seq.clear()— Veeg alles schoon.

    Afronding

    Python maakt het in principe vrij eenvoudig om items in lijsten te verwijderen, maar het draait allemaal om het kiezen van de juiste tool voor de klus. Gebruik lijstcomprehensies voor bulkverwijderingen, indexeer methoden wanneer de locatie bekend is en remove()voor de eerste keer dat items worden gevonden. Houd wel rekening met enkele eigenaardigheden – zoals het verwijderen van slices, die vreemd kunnen zijn – en test je code tot deze perfect werkt. Meestal is een snel filter of een in-place vervanging voldoende.

    Samenvatting

    • Gebruik lijstbegrip voor bulkverwijdering op basis van voorwaarden
    • Kies pop()of delals je de positie kent
    • Gebruiken remove()om de eerste overeenkomende waarde te verwijderen
    • Wis de hele lijst clear()indien nodig

    Hoewel Python talloze manieren biedt om je lijsten op te schonen, kan het op de lange termijn een hoop hoofdpijn besparen als je weet welke je moet kiezen. Hopelijk scheelt dit iemand een paar uur, of zorgt het er in ieder geval voor dat je je minder onwetend voelt over het opschonen van lijsten.