Kuinka poistaa kohde Python -luettelosta

Ratkaisun esikatselu:Rakenna suodatettu luettelo, jossa on luettelon ymmärtäminen kuntopohjaisille poistoille, käytä, käytäpop()taidelpoistaa hakemistolla ja käyttääremove()Ensimmäisen vastaavan arvon poistaminen. Python -luettelot ovat dynaamisia taulukkoja, joten hakemiston poistot vaihtavat takaosaa; Mieluummin yhden läpäisevän suodatin, kun poistat monia kohteita ehdolla.

Menetelmä 1 - Poista kohteet ehdolla (yksi passi)

Tämä lähestymistapa rakentaa uuden luettelon, joka pitää vain haluamasi elementit. Se toimii lineaarisesti ja välttää luettelon muokkaamisen sudenkuopat toistuessaan sen yli. Katso Python Docs: Docs.python.org -luetteloiden luettelot.

Vaihe 1:Kirjoita luettelon ymmärtäminen, joka pitää elementit, jotka täyttävät ehdosi.

nums = [1, 2, 5, 4, 3, 5, 6]
filtered = [x for x in nums if x != 5]

Vaihe 2:Korvaa alkuperäinen luettelo, jos joudut muokkaamaan sitä paikoillaan.

nums[:] = [x for x in nums if x != 5]

Vaihe 3:Sisäkkäisten luetteloiden osalta sisäkkäinen ymmärrys suodattaaksesi sisäjaksoja.

lists = [[1, 2, 3], [4, 5, 6]]
lists = [[x for x in inner if x % 2 == 0] for inner in lists]

Miksi tämä toimii paremmin: teet yhden ohi tietojen yli ja vältät O (n²) -kuvioita, jotka tapahtuvat poistettaessa keskustasta toistuvasti.

Menetelmä 2 - Poista hakemisto pop- tai del: llä

Käytä hakemistoa, kun tiedät sijainnin.pop()Palauttaa poistetun kohteendelei. Katso List.pop ja Del -lausunto.

Vaihe 1:Poista ja hanki esine hakemistoonpop().

items = ["a", "b", "c", "d"]
removed = items.pop(2)  # removes "c"

Vaihe 2:Poista hakemistolla palauttamatta arvoa käyttämällädel.

items = ["a", "b", "c", "d"]
del items[1]  # removes "b"

Vaihe 3:Poista viipale (indeksien alue)delViipaleen syntaksi.

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

Huomautuksia: Hakemistopohjaiset poistot keskimmäisestä vuorosta seuraavat jäljellä olevat elementit. Negatiiviset indeksit toimivat (-1on viimeinen kohde). Soittaminenpop()Ilman hakemistoa poistaa viimeisen kohteen.

Lisätietoja:JetBlue käyttää Find Oy Share -tuotteen sijaintia kadonneen matkalaukkujen jäljittämiseen

Menetelmä 3 - Poista ensimmäinen sovitusarvo poistamalla

Käytä tätä, kun tiedät arvon poistettavaksi ja sinun on vain pudotettava ensimmäinen tapahtuma. Katso List.Remove.

Vaihe 1:Soittaaremove(value)Ensimmäisen ottelun poistaminen.

names = ["Ada", "Linus", "Ada", "Guido"]
names.remove("Ada")  # removes the first "Ada"

Vaihe 2:Suojaa puuttuvia arvoja välttääksesiValueError.

if "Grace" in names:
    names.remove("Grace")

Vinkki: Jos joudut poistamaan kaikki arvon tapahtumat, käytä menetelmää 1 suodattaaksesi silmukan sijasta toistuvillaremove().

Menetelmä 4 - tyhjennä koko luettelo

Kun haluat tyhjentää luettelon, mutta pidä muuttuja, käytäclear(). Katso List.clear.

Vaihe 1:Tyhjennä luettelo paikoillaan.

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

Vaihtoehto: Tehtävä tyhjälle viipaleelle (records[:]=[]) myös puhdistuu.

Menetelmä 5 - Turvallisuus- ja suorituskykyvinkit

Nämä suojakaiteet auttavat sinua välttämään ohitettuja elementtejä ja hitaita operaatioita esineiden poistamisessa.

Vaihe 1:Vältä luettelon muuttamista toistuessaan sen yli.

# Risky: may skip elements
for x in items:
    if should_delete(x):
        items.remove(x)  # don't do this

# Safe: build a filtered list (Method 1)
items = [x for x in items if not should_delete(x)]

Vaihe 2:Mieluummin yhden läpäisevän suodatin poistaessasi monia kohteita.

# Efficient for many deletions
data[:] = [x for x in data if keep(x)]

Vaihe 3:Käytä indeksipohjaista poistoa tunnetulle sijainnille tai viimeiselle elementille.

# Fast path for the end
last = data.pop()  # remove last item

Miksi tällä on merkitystä: luetellaan poistot keskivaihtoelementeistä, joten toistuvat silmukan sisäiset deleetiot kasvavat. Yksi ymmärryksen läpäisy pitää työn verrannollinen luettelon kokoon.

Pikaviite

Opi milloin jokaista työkalua käytetään.

  • [x for x in seq if keep(x)]: Poista kunto; yksi passi; turvallisin useille poistoille.
  • seq.pop(i): Poista hakemisto ja palauta kohde (oletusasetukset viimeiseen elementtiin).
  • del seq[i]: Poista hakemistolla palauttamatta; tukee myös viipaleita.
  • seq.remove(value): Poista ensimmäinen vastaava arvo; nostaa, jos sitä ei löydy.
  • seq.clear(): Poista kaikki esineet; pitää luettelo -objektin.

Se on se-ota tapa, joka sopii tapauksesi: Suodata olosuhteet, asentojen hakemisto ja arvopohjainen poisto, kun tarvitset vain ensimmäisen ottelun.

Related Posts