Du tror en negativ indeks gir feil

Handler om: Liste

I mange språk krasjer `liste[-1]`. I Python teller den bakfra og gir siste element. Derfor slipper en regnefeil som gir −1 stille gjennom: du får et svar, bare fra feil ende av lista. Sjekker du at en indeks er innenfor, må du teste `0 <= i < len(liste)` — ikke bare `i < len(liste)`.

Eksempel

Du sjekker om en rute er innenfor rutenettet med `if rad < 3`, og rad = −1 slipper gjennom som siste rad.

Slik tenker du riktig om det

Tegn lista med to sett indekser: 0, 1, 2 forfra og −1, −2, −3 bakfra. Begge er gyldige, så en grensesjekk må stenge begge veier.

Slik ser det ut i kode

Slik gikk det galt

if rad < len(rutenett):         # −1 slipper gjennom
    return rutenett[rad]

Slik fikser du det

if 0 <= rad < len(rutenett):    # steng begge ender
    return rutenett[rad]

Les om dette i boka

↓↑ naviger Enter åpne ShiftEnter ny fane Esc lukk
Velg tema
Skala