Co znamená chyba „index n-tice mimo rozsah“ v Pythonu?


Nejlepší odpověď

Dobrý večer,

Některé jazyky naštěstí implementují bezpečný objekt přístup, i když toho v Pythonu moc nevím, můžeme předpokládat, že objekt, ke kterému přistupujete, má kontrolu rozsahu.

Z tohoto velmi jednoduchého tvrzení můžeme pochopit, že Python vytváří objekty na většině svých základních datové typy a implicitně volá své přistupující objekty podle potřeby, transformace a kontrola rozsahu, převody atd., takže tam máte logickou chybu, zkontrolujte prosím, proč jste přistupovali k n-tici mimo její rozsah, zjevně má kód nějakou chybu v indexu a / nebo velikost n-tice.

To je poznámka, která označuje, že ostatní jazyky jsou tolerantnější v tom, co vám umožňují, což pak vede k takzvané chybě běhu, protože přístup mimo rozsah znamená, že buď číst neúmyslná data a mohl by také zapisovat do paměti jiného objektu, a tedy poškodit data, což by mělo za následek buď ztrátu dat, nebo spuštění ti me crash.

S pozdravem

Jean-François

Odpověď

V pythonu je seznam proměnlivý, takže velikost není pevná.

Vzhledem k tomu, že velikost není pevná.

Na základě vámi přiřazených hodnot seznamu, správa paměti pythonu – interně vytvoří seznam (dostupný index) v vzoru růstu 0, 4 , 8, 16, 25, 35, 46, 58, 72, 88,… místo toho, abychom mnohokrát volali realloc ().

Ale přiřazené hodnoty seznamu jsou menší než seznam ( dostupný index).

Takže u seznamu je dostupný index > přiřazený index.

Pokud se pokusíte získat přístup k prázdnému nebo Žádnému prvku od ukazující na dostupný index seznamu, poté získáte „ Seznamový index mimo chybu rozsahu“.

Otevřete python a zašpinte si ruce s th je pod kódem, abychom lépe porozuměli.

>> x = list (1234)

>> x

[1, 2, 3, 4]

>> length = len (x)

4

>> x [délka ]

Chyba indexu: index seznamu mimo rozsah

POZNÁMKA: Index seznamu začíná od nuly (0).

Ale zde je délka čtyři.

Přiřazení výše uvedeného seznamu je následující:

x [0] = 1

x [1] = 2

x [2] = 3

x [3] = 4

x [4] =?

Pokud se pokusíte získat přístup k x [4], což je Pokud neexistuje , index seznamu mimo rozsah přijde.

Pro lepší pochopení toho, jak seznamy interně přidělují paměť, přejděte na tento odkaz Seznam Pythonu implementace .

Děkuji !!!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *