Taigi jūs dirbote su sąrašu arba masyvu Python ir tikriausiai bandėte jį suskirstyti. Tačiau vietoj laukiamo rezultato gausite klaidą, kuri sako: „Indekso sąrašas nepatenka į diapazoną“. Nesijaudinkite, taip gali nutikti bet kam.
Išsiaiškinkime, ką ši klaida reiškia, jos priežastį ir kaip ją pašalinti be jokių papildomų rūpesčių.
Ką reiškia „Python“ klaida „sąrašo indeksas už diapazono“?
Kai „Python“ pateikia klaidą „sąrašo indeksas už diapazono ribų“, tai reiškia, kad bandėte išskaidyti sąrašą toliau nei paskutinis indeksas.
Python identifikuoja kiekvieną sąrašo elementą pagal jo indeksą. O sąrašo indeksas prasideda nuo nulio. Pavyzdžiui, kai turite sąrašą su penkiais elementais, pirmasis jo elementas yra nuliniame indekse, o paskutinis - ketvirtame indekse.
Pavyzdžiui, penkių programavimo kalbų sąraše:
Kalbos = ["Python", "Go", "PHP", "C", "Perl"]
Pirmiau pateikto sąrašo indeksavimas yra nuo nulio iki keturių. Taigi bandant jį supjaustyti, kad būtų atspausdintas penktasis elementas, kaip parodyta toliau, atsiranda klaida:
spausdinti (kalbos[5])
Išvestis:
IndexError: sąrašo indeksas nepatenka į diapazoną
Aukščiau pateiktame pavyzdyje Python bando ieškoti penktojo sąrašo indekso, o kai jo neranda, pateikia sąrašo indekso klaidą. Taip yra todėl, kad pirmasis elementas (Python) yra nuliniame indekse, o paskutinis (Perl) – ketvirtame.
Tai yra klaidos „sąrašo indeksas už diapazono ribų“ pagrindas. Kaip minėta, „Python“ išmeta jį kiekvieną kartą, kai bandote padalyti sąrašą už paskutinio indekso.
Kaip pašalinti „Python“ klaidą „sąrašo indeksas už diapazono“.
Taigi, kaip pašalinti šią klaidą? Tai lengva.
Be ankstesnio skyriaus, galite spausdinti indeksus naudodami a dėlkilpa sąrašo suvokime:
indexes = [languages.index (i) for i kalbomis]
spausdinti (indeksai)
Išvestis:
[0, 1, 2, 3, 4]
Sąrašo indeksas yra programavimo pjaustymo pagrindas. Taigi, kadangi žinote aukščiausią aukščiau esančios išvesties sąrašo indeksą (4), galite iššifruoti pjūvio ribą.
Taigi, norėdami padalyti sąrašą ir gauti paskutinį elementą:
spausdinti (kalbos[4])
Išvestis:
Perl
Dabar jis pateikia teisingą rezultatą.
Ką daryti, jei norite peržiūrėti sąrašą naudodami jo indeksą?
Be įprastų Python ciklas, taip pat galite naudoti rodyklės sąvoką norėdami kartoti sąrašą. Nors šis metodas gali atrodyti sudėtingas, kartais jo neišvengiama. Pavyzdžiui, tai naudinga, jei norite rūšiuoti sąrašą atvirkštine tvarka.
Šis metodas veikia nustatant pradinį indeksą ir padidinant arba sumažinant jį vienu iki paskutinio galimo indekso.
Norėdami spausdinti elementus su didėjančiu indekso numeriu (nuo pirmo iki paskutinio), pvz.:
indeksas = 0 # Pradinis indeksas
man kalbomis:
spausdinti (kalbos[indeksas])
indeksas +=1
Išvestis:
Python
Eik
PHP
C
Perl
Bet kas atsitiks, jei pradinį indeksą nustatysite į vieną, o ne į nulį? Pažvelk:
indeksas = 1 # Pradinis indeksas
man kalbomis:
spausdinti (kalbos[indeksas])
indeksas +=1
Išvestis:
Eik
PHP
C
Perl
IndexError: sąrašo indeksas nepatenka į diapazoną
Aukščiau pateiktame pavyzdyje indeksavimas prasideda nuo antrojo elemento (pirmas, Eik). Taigi, didinant, ciklas nesustoja, kol neužbaigia penkių elementų skaičiavimo. Tai verčia indeksą padidinti vienu iki paskutinio elemento.
Taigi pjūvis pasiekia penktąjį indeksą, kuris nepasiekiamas. Taigi rodoma indekso klaida. Tai reiškia, kad kiekvieno elemento indeksas didėja taip:
1=1, 1+1=2, 1+2=3, 1+3=4, 1+4=5
Vietoj teisingo modelio, kuris yra:
0=0, 0+1=1, 1+1=2, 1+2=3, 1+3=4
Kaip matote, aukščiausia aukščiau pateikto indekso reikšmė yra keturi, o tai yra teisinga, nes ciklas pradeda didinti indeksavimą nuo nulio.
Todėl nustačius pradinį indeksą į nulį, kaip tai padarėte pirmame šios skilties pavyzdyje, pašalinama klaida „sąrašo indeksas nepatenka į diapazoną“:
indeksas = 0 # Pradinis indeksas
man kalbomis:
spausdinti (kalbos[indeksas])
indeksas +=1 #Padidinkite indeksą vienu kiekvienai iteracijai
Norėdami taikyti šią koncepciją elementams išvesti atvirkštine tvarka, turėsite atimti vieną iš masyvo ilgio. Taigi tai verčia indeksą pradėti nuo keturių ir skaičiuoti iki pirmojo indekso, nulio.
Tai naudinga, jei nesate tikri dėl sąrašo ilgio reikšmės, gaunamos iš šaltinio, tarkime, duomenų bazės.
Štai pavyzdys:
indeksas = (len (kalbos)-1)
man kalbomis:
spausdinti (kalbos[indeksas])
indeksas -=1 # Kiekvienai iteracijai sumažinkite indeksą vienu
Išvestis:
Perl
C
PHP
Eik
Python
Tačiau neatėmus vieno iš sąrašo ilgio, atsiranda klaida „sąrašas už diapazono indekso“:
indeksas = (len (kalbos)-1)
man kalbomis:
spausdinti (kalbos[indeksas])
indeksas -=1
Išvestis:
IndexError: sąrašo indeksas nepatenka į diapazoną
Aukščiau pateiktas kodas pateikia indekso klaidą, nes sąrašo ilgis yra penki, ir jis bando pradėti indeksavimą nuo penkių iki nulio, o didžiausias indeksas yra keturi. Taigi tai reiškia, kad sąraše nėra penktojo indekso (šeštojo elemento).
Gaukite kūrybinius tvarkymo sąrašus „Python“.
Python klaidos yra patogios žmogui ir paprastai skaitomos. Visada tai leidžia juos atsekti iki pagrįsto masto.
Kaip jūs sužinojote, pašalinti sąrašo indeksą už diapazono klaidos yra gana paprasta. Jei susidursite su šia klaida savo būsimose programose, nepaisant to, koks sudėtingas sąrašas, galite taikyti šiame įraše paaiškintas sąvokas, kad išspręstumėte problemą.
Nesivaržykite kūrybiškai sudaryti sudėtingus sąrašus. Taip pat galbūt norėsite išmokti rūšiuoti sąrašus Python laisvu laiku, kad geriau suprastumėte visa tai.
Sąrašai su kelių tipų duomenimis gali greitai išeiti iš rankų. Štai kaip juos rūšiuoti naudojant Python.
Skaitykite toliau
- Programavimas
- Python
- Programavimas
- Kodavimo patarimai
Idowu aistringai vertina viską, kas yra išmanioji technologija ir produktyvumas. Laisvalaikiu jis žaidžia koduodamas ir, kai jam nuobodu, pereina prie šachmatų lentos, tačiau taip pat mėgsta retkarčiais atitrūkti nuo rutinos. Jo aistra parodyti žmonėms kelią apie šiuolaikines technologijas skatina jį rašyti daugiau.
Prenumeruokite mūsų naujienlaiškį
Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. knygų ir išskirtinių pasiūlymų!
Norėdami užsiprenumeruoti, spustelėkite čia