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














