Tātad jūs strādājāt ar sarakstu vai masīvu programmā Python un, iespējams, mēģinājāt to sadalīt. Bet gaidītā rezultāta vietā tiek parādīts kļūdas ziņojums “saraksta indekss ārpus diapazona”. Neuztraucieties, tas var notikt ikvienam.

Izpētīsim šīs kļūdas nozīmi, tās cēloni un to, kā to novērst bez turpmākas piepūles.

Ko Python nozīmē kļūda "saraksta indekss ārpus diapazona"?

Ja Python izdod kļūdu “saraksta indekss ārpus diapazona”, tas nozīmē, ka mēģinājāt sarakstu sadalīt ārpus tā pēdējā indeksa.

Python identificē katru saraksta vienumu pēc tā indeksa. Un saraksta indekss sākas no nulles. Piemēram, ja jums ir saraksts ar pieciem vienumiem, tā pirmais vienums ir nulles indeksā, bet pēdējais ir ceturtajā rādītājā.

Piemēram, piecu programmēšanas valodu sarakstā:

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

Iepriekš minētā saraksta indeksācija ir no nulles līdz četriem. Tātad, mēģinot to sagriezt, lai izdrukātu piekto vienumu, kā parādīts tālāk, rodas kļūda:

drukāt (valodas[5])
Izvade:
IndexError: saraksta indekss ir ārpus diapazona

Iepriekš minētajā piemērā Python mēģina sarakstā meklēt piekto indeksu, un, ja tas to nevar atrast, tas rada saraksta indeksa kļūdu. Tas ir tāpēc, ka pirmais elements (Python) atrodas indeksā nulle, bet pēdējais (Perl) ir indeksā ceturtais.

Tas ir kļūdas "saraksta indekss ārpus diapazona" pamatā. Kā jau minēts, Python to izmet ikreiz, kad mēģināt sadalīt sarakstu ārpus tā pēdējā indeksa.

Kā noņemt kļūdu "saraksta indekss ārpus diapazona" programmā Python

Tātad, kā jūs varat noņemt šo kļūdu? Tas ir viegli.

Papildus iepriekšējai sadaļai varat izdrukāt indeksus, izmantojot a priekšcilpa saraksta izpratnē:

indeksi = [languages.index (i) for i valodās]
drukāt (indeksi)
Izvade:
[0, 1, 2, 3, 4]

Saraksta indekss ir programmēšanas sagriešanas pamats. Tātad, tā kā jūs zināt augstāko izvades indeksu sarakstā (4), varat atšifrēt šķēluma ierobežojumu.

Tādējādi, lai sadalītu sarakstu un iegūtu pēdējo vienumu:

drukāt (valodas[4])
Izvade:
Perl

Tagad tas izvada pareizo rezultātu.

Ko darīt, ja vēlaties pārlūkot sarakstu, izmantojot tā indeksu?

Papildus parastajam Python cilpai, varat arī izmantot indeksa koncepciju, lai atkārtotu sarakstu. Lai gan šī metode var šķist grūta, dažreiz tā ir neizbēgama. Piemēram, tas noder, ja vēlaties kārtot sarakstu apgrieztā secībā.

Šī metode darbojas, iestatot sākotnējo indeksu un palielinot vai samazinot to par vienu līdz pēdējam pieejamajam indeksam.

Lai izdrukātu vienumus ar pieaugošu indeksa numuru (no pirmā līdz pēdējam), piemēram:

indekss = 0 # Sākotnējais rādītājs
man valodās:
drukāt (valodas[indekss])
indekss +=1
Izvade:
Python
Aiziet
PHP
C
Perl

Bet kas notiek, ja sākotnējo indeksu iestatāt uz vienu, nevis uz nulli? Paskaties:

indekss = 1 # Sākotnējais rādītājs
man valodās:
drukāt (valodas[indekss])
indekss +=1
Izvade:
Aiziet
PHP
C
Perl
IndexError: saraksta indekss ir ārpus diapazona

Iepriekš minētajā piemērā indeksēšana sākas ar otro vienumu (pirmais rādītājs, Aiziet). Tātad, palielinoties, cilpa neapstājas, kamēr nav pabeigta piecu vienumu skaitīšana. Tas liek indeksam palielināties par vienu līdz pēdējam vienumam.

Tādējādi sadaļa sasniedz piekto indeksu, kas nav pieejams. Tātad tas rada indeksa kļūdu. Tas nozīmē, ka katras preces indekss palielinās šādā shēmā:

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

Pareizā modeļa vietā, kas ir:

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

Kā redzat, augstākā indeksa vērtība ir četri, kas ir pareizi, jo cilpa sāk palielināt indeksāciju no nulles.

Tāpēc, iestatot sākotnējo indeksu uz nulli, kā to izdarījāt šīs sadaļas pirmajā piemērā, tiek noņemta kļūda "saraksta indekss ārpus diapazona".

indekss = 0 # Sākotnējais rādītājs
man valodās:
drukāt (valodas[indekss])
indekss +=1 #Palieliniet indeksu par vienu katrai iterācijai

Lai izmantotu šo koncepciju vienumu izvadīšanai apgrieztā secībā, jums ir jāatņem viens no masīva garuma. Tātad tas liek indeksam sākt no četriem un skaitīt uz leju līdz pirmajam rādītājam, nullei.

Tas ir noderīgi, ja neesat pārliecināts par saraksta garuma vērtību, kas nāk no avota, piemēram, datu bāzes.

Šeit ir piemērs:

indekss = (len (valodas)-1)
man valodās:
drukāt (valodas[indekss])
indekss -=1 #Katrai iterācijai samaziniet indeksu par vienu
Izvade:
Perl
C
PHP
Aiziet
Python

Bet, ja no saraksta garuma neatņem vienu, tiek parādīta kļūda "saraksta ārpus diapazona indeksa":

indekss = (len (valodas)-1)
man valodās:
drukāt (valodas[indekss])
indekss -=1
Izvade:
IndexError: saraksta indekss ir ārpus diapazona

Iepriekš minētais kods rada indeksa kļūdu, jo saraksta garums ir pieci, un tas mēģina sākt indeksēšanu no pieciem līdz nullei, savukārt augstākais indekss ir četri. Tātad tas nozīmē, ka sarakstam nav piektā indeksa (sestais vienums).

Iegūstiet radošus apstrādes sarakstus programmā Python

Python kļūdas ir cilvēkiem draudzīgas un parasti lasāmas. Tas vienmēr padara tos saprātīgā mērā izsekojamus.

Kā jūs uzzinājāt, saraksta indeksa noņemšana ārpus diapazona kļūdas ir diezgan vienkārša. Ja savās turpmākajās programmās saskaraties ar šo kļūdu, neatkarīgi no tā, cik sarežģīts ir saraksts, varat izmantot šajā ziņojumā aprakstītos jēdzienus, lai atrisinātu problēmu.

Esiet radošs ar sarežģītiem sarakstiem. Varat arī uzzināt, kā brīvajā laikā kārtot sarakstus programmā Python, lai labāk izprastu to visu.

Kā Python kārtot gandrīz jebkura veida sarakstus

Saraksti ar vairākiem datu tipiem var ātri izkļūt no rokas. Lūk, kā tos kārtot, izmantojot Python.

Lasiet Tālāk

DalītiesČivinātE-pasts
Saistītās tēmas
  • Programmēšana
  • Python
  • Programmēšana
  • Kodēšanas padomi
Par autoru
Idowu Omisola (Publicēti 136 raksti)

Idowu aizraujas ar jebko viedo tehnoloģiju un produktivitāti. Brīvajā laikā viņš spēlējas ar kodēšanu un pārslēdzas uz šaha galdu, kad viņam ir garlaicīgi, taču viņam patīk arī ik pa laikam atrauties no rutīnas. Viņa aizraušanās parādīt cilvēkiem ceļu par modernajām tehnoloģijām motivē viņu rakstīt vairāk.

Vairāk no Idowu Omisola

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai saņemtu tehniskos padomus, pārskatus, bezmaksas e-grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu