Lisää
Kohteen indeksin etsiminen sen sisältävän listan perusteella Pythonissa
Miten saan luettelon ["foo", "bar", "baz"]
ja luettelon "bar"
kohdan indeksin (1) Pythonissa?
2865
3
Viite: Tietorakenteet > Lisää luetteloista
Varoituksia seuraa
Huomaa, että vaikka tämä on ehkä siistein tapa vastata kysymykseen siten kuin se on esitetty,
index
on melko heikko osalist
API:ta, enkä muista, milloin olisin viimeksi käyttänyt sitä vihaisena. Minulle on huomautettu kommenteissa, että koska tähän vastaukseen viitataan paljon, siitä pitäisi tehdä täydellisempi. Seuraavassa on joitakin varoituksialist.indexistä
. Kannattaa luultavasti aluksi vilkaista sen docstringiä:Lineaarinen aikakompleksisuus listan pituuden suhteen.
index
-kutsu tarkistaa listan jokaisen elementin järjestyksessä, kunnes se löytää vastaavuuden. Jos listasi on pitkä, etkä tiedä, missä kohtaa listaa se esiintyy, tämä haku voi muodostua pullonkaulaksi. Siinä tapauksessa sinun kannattaa harkita toisenlaista tietorakennetta. Huomaa, että jos tiedät suurin piirtein, mistä osuma löytyy, voit antaaindex
:lle vihjeen. Esimerkiksi tässä pätkässäl.index(999_999, 999_990, 1_000_000)
on noin viisi kertaluokkaa nopeampi kuin suoral.index(999_999)
, koska ensin mainitun on etsittävä vain 10 merkintää, kun taas jälkimmäisen on etsittävä miljoona:Palauttaa vain ensimmäisen vastaavuuden indeksin argumenttiinsa.
Kutsu
index
hakee listaa järjestyksessä, kunnes se löytää osuman, ja pysähtyy siihen. Jos odotat tarvitsevasi useampien osumien indeksejä, sinun pitäisi käyttää listan ymmärtämistä tai generaattorilauseketta.Useimmissa paikoissa, joissa olisin ennen käyttänyt
index
, käytän nyt listan ymmärtämistä tai generaattorilauseketta, koska ne ovat yleistettävämpiä. Jos siis harkitsetindex
:n käyttämistä, tutustu näihin erinomaisiin python-ominaisuuksiin.Heittää, jos elementtiä ei ole listassa.
Kutsu
index
:iin johtaaValueError
:iin, jos elementti'ei ole läsnä.Jos kohdetta ei välttämättä ole luettelossa, sinun on joko
item in my_list
(siisti, luettava lähestymistapa), tai sittenindex
-kutsutry/except
-lohkoon, joka ottaa kiinniValueError
-virheen (luultavasti nopeampi, ainakin kun etsittävä lista on pitkä ja kohde on yleensä olemassa).Yksi asia, joka on todella hyödyllinen Pythonin oppimisessa, on interaktiivisen aputoiminnon käyttäminen:
joka usein johtaa sinut etsimäsi menetelmän pariin.
index()
palauttaa arvon ensimmäisen indeksin!