Du endrer lista mens du løkker over den

Handler om: Liste, Løkke

Fjerner du elementer fra en liste mens `for` går gjennom den, glir de gjenværende ett hakk fram — og løkka hopper over dem. Resultatet er at omtrent annethvert element overlever. Bygg heller en ny liste, eller løkk over en kopi med `lista[:]`.

Eksempel

Du fjerner alle oddetall fra [1, 3, 5, 7] og sitter igjen med [3, 7].

Slik tenker du riktig om det

Tenk på løkka som en finger som peker på plass 0, 1, 2 … Fjerner du et element, glir alt bakover ett hakk, men fingeren går videre uansett. Rør aldri lista fingeren står i.

Slik ser det ut i kode

Slik gikk det galt

for tall in tallene:
    if tall % 2 == 1:
        tallene.remove(tall)   # lista krymper under føttene

Slik fikser du det

partall = [t for t in tallene if t % 2 == 0]   # ny liste

Les om dette i boka

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