Joten työskentelit luettelon tai taulukon kanssa Pythonissa ja yritit todennäköisesti leikata sitä. Mutta odotetun tuloksen sijaan saat virheilmoituksen, jossa lukee "luetteloindeksin alueen ulkopuolella". Ei hätää, se voi tapahtua kenelle tahansa.

Katsotaanpa, mitä tämä virhe tarkoittaa, sen syytä ja kuinka se voidaan poistaa ilman lisäpuheita.

Mitä "luetteloindeksin alueen ulkopuolella" -virhe tarkoittaa Pythonissa?

Kun Python antaa "luetteloindeksin alueen ulkopuolella" -virheen, se tarkoittaa, että yritit leikata luetteloa sen viimeisen indeksin ulkopuolelle.

Python tunnistaa jokaisen luettelon kohteen sen indeksin perusteella. Ja listan indeksi alkaa nollasta. Jos sinulla on esimerkiksi luettelo, jossa on viisi kohdetta, sen ensimmäinen kohde on indeksissä nolla, kun taas viimeinen on neljännessä indeksissä.

Esimerkiksi viiden ohjelmointikielen luettelossa:

Kielet = ["Python", "Go", "PHP", "C", "Perl"]

Yllä olevan luettelon indeksointi on nollan ja neljän välillä. Joten yritetään viipaloida se tulostaaksesi viidennen kohteen alla kuvatulla tavalla antaa virheen:

tulostaa (kielet[5])
Lähtö:
IndexError: luetteloindeksi on alueen ulkopuolella

Yllä olevassa esimerkissä Python yrittää etsiä luettelosta viidettä hakemistoa, ja kun se ei löydä sitä, se antaa luetteloindeksivirheen. Tämä johtuu siitä, että ensimmäinen elementti (Python) on indeksissä nolla, kun taas viimeinen (Perl) on indeksissä neljä.

Tämä on "luetteloindeksin alueen ulkopuolella" -virheen perusta. Kuten sanottu, Python heittää sen aina, kun yrität viipaloida luettelon sen viimeisen indeksin ulkopuolelle.

Kuinka poistaa "luetteloindeksin alueen ulkopuolella" -virhe Pythonissa

Joten kuinka voit poistaa tämän virheen? Se on helppoa.

Edellisen osion lisäksi voit tulostaa indeksit käyttämällä a vartensilmukka luettelon ymmärtämisessä:

indexes = [languages.index (i) for i kielillä]
tulostaa (hakemistot)
Lähtö:
[0, 1, 2, 3, 4]

Listan indeksi on ohjelmoinnin viipaloinnin perusta. Joten koska tiedät luettelon korkeimman indeksin yllä olevalle tulosteelle (4), voit tulkita slice-rajan.

Siten listan leikkaaminen ja viimeisen kohteen saaminen:

tulostaa (kielet[4])
Lähtö:
Perl

Se näyttää nyt oikean tuloksen.

Entä jos haluat käydä luettelossa läpi sen indeksin avulla?

Tavallisen lisäksi Python silmukalle, voit myös käyttää hakemistokonseptia iteroidaksesi luetteloa. Vaikka tämä menetelmä saattaa näyttää vaikealta, se on joskus väistämätöntä. Se on kätevä esimerkiksi, jos haluat lajitella luettelon käänteisessä järjestyksessä.

Tämä menetelmä toimii asettamalla alkuindeksin ja lisäämällä tai vähentämällä sitä yhdellä viimeiseen saatavilla olevaan indeksiin asti.

Jos haluat tulostaa kohteet kasvavalla indeksinumerolla (ensimmäisestä viimeiseen), esimerkiksi:

indeksi = 0 # Alkuindeksi
minulle kielissä:
tulostaa (kielet[index])
indeksi +=1
Lähtö:
Python
Mennä
PHP
C
Perl

Mutta mitä tapahtuu, jos asetat alkuindeksin ykköseksi nollan sijasta? Katso:

indeksi = 1 # Alkuindeksi
minulle kielissä:
tulostaa (kielet[index])
indeksi +=1
Lähtö:
Mennä
PHP
C
Perl
IndexError: luetteloindeksi on alueen ulkopuolella

Yllä olevassa esimerkissä indeksointi alkaa toisesta kohteesta (indeksi yksi, Mennä). Kasvattaessa silmukka ei siis pysähdy ennen kuin se on laskenut viisi kohdetta. Tämä pakottaa indeksin kasvamaan yhdellä viimeiseen kohtaan.

Siten siivu saavuttaa viidennen indeksin, joka ei ole käytettävissä. Joten se antaa indeksivirheen. Se tarkoittaa, että indeksi kasvaa seuraavalla tavalla kunkin kohteen kohdalla:

1=1, 1+1=2, 1+2=3, 1+3=4, 1+4=5 

Oikean kuvion sijaan, joka on:

0=0, 0+1=1, 1+1=2, 1+2=3, 1+3=4

Kuten näet, yllä olevan indeksin suurin arvo on neljä, mikä on oikein, koska silmukka alkaa kasvattaa indeksointia nollasta.

Siksi alkuperäisen indeksin asettaminen nollaan, kuten teit tämän osion ensimmäisessä esimerkissä, poistaa "luetteloindeksin alueen ulkopuolella" -virheen:

indeksi = 0 # Alkuindeksi
minulle kielissä:
tulostaa (kielet[index])
indeksi +=1 #Kasvata indeksiä yhdellä jokaisella iteraatiolla

Jos haluat käyttää tätä käsitettä kohteiden tulostamiseen käänteisessä järjestyksessä, sinun on vähennettävä yksi taulukon pituudesta. Joten tämä pakottaa indeksin aloittamaan neljästä ja laskemaan ensimmäiseen indeksiin, nollaan.

Tämä on hyödyllistä, jos et ole varma lähteestä, esimerkiksi tietokannasta, tulevan luettelon pituudesta.

Tässä on esimerkki:

indeksi = (len (kielet)-1)
minulle kielissä:
tulostaa (kielet[index])
indeksi -=1 #Pienennä indeksiä yhdellä jokaisessa iteraatiossa
Lähtö:
Perl
C
PHP
Mennä
Python

Mutta jos luettelon pituudesta ei vähennetä yhtä, seurauksena on "luettelo alueen indeksin ulkopuolella" -virhe:

indeksi = (len (kielet)-1)
minulle kielissä:
tulostaa (kielet[index])
indeksi -=1
Lähtö:
IndexError: luetteloindeksi on alueen ulkopuolella

Yllä oleva koodi antaa indeksivirheen, koska listan pituus on viisi, ja se yrittää aloittaa indeksoinnin viidestä nollaan, kun taas korkein indeksi on neljä. Joten se tarkoittaa, että luettelossa ei ole viidettä indeksiä (kuudes kohta).

Hanki luovia käsittelyluetteloita Pythonissa

Pythonin virheet ovat ihmisystävällisiä ja tyypillisesti luettavia. Tämä tekee niistä poikkeuksetta jäljitettävissä kohtuullisessa määrin.

Kuten olet oppinut, luetteloindeksin poistaminen alueen virheestä on melko helppoa. Jos kohtaat tämän virheen tulevissa ohjelmissasi riippumatta siitä, kuinka monimutkainen luettelo on, voit käyttää tässä viestissä selitettyjä käsitteitä ongelman ratkaisemiseksi.

Voit vapaasti olla luova monimutkaisten luetteloiden kanssa. Saatat myös haluta oppia lajittelemaan luetteloita Pythonissa vapaa-ajalla saadaksesi paremman käsityksen kaikesta.

Kuinka lajitella melkein minkä tahansa tyyppisiä luetteloita Pythonissa

Useita tietotyyppejä sisältävät luettelot voivat riistäytyä käsistä nopeasti. Näin lajittelet ne Pythonilla.

Lue Seuraava

JaaTweetSähköposti
Liittyvät aiheet
  • Ohjelmointi
  • Python
  • Ohjelmointi
  • Koodausvinkkejä
Kirjailijasta
Idowu Omisola (136 artikkelia julkaistu)

Idowu on intohimoinen kaikkeen älykkääseen tekniikkaan ja tuottavuuteen. Vapaa-ajallaan hän leikkii koodaamalla ja vaihtuu shakkilaudalle, kun on kyllästynyt, mutta hän myös pitää välillä irtautumisesta rutiineista. Hänen intohimonsa näyttää ihmisille tietä modernin tekniikan parissa motivoi häntä kirjoittamaan lisää.

Lisää Idowu Omisolalta

tilaa uutiskirjeemme

Liity uutiskirjeemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e-kirjoja ja eksklusiivisia tarjouksia!

Klikkaa tästä tilataksesi