Liste
En ordnet samling verdier eller objekter du kan indeksere og gå gjennom med en løkke. Grunnlag fra IT1.
Slik kan du tenke om det
- Indeksen er avstanden fra start Det første elementet er null skritt unna starten — derfor har det indeks 0, ikke 1. Siste element ligger på len - 1 forfra, eller på -1 hvis du heller vil telle bakfra.
Vanlige feil
- Du tror lista starter på indeks 1 Det første elementet i en liste har indeks 0, ikke 1. Derfor er liste[1] det ANDRE elementet, og siste element er liste[len(liste) - 1] (eller liste[-1]). Bruker du liste[len(liste)], får du IndexError.
- Du tror b = a lager en kopi av lista b = a kopierer ikke lista — det limer en ny navnelapp på den SAMME lista. Endringer gjennom det ene navnet (b.append, b[0] = ...) synes gjennom det andre. En ekte kopi lager du med b = list(a). Fella er lumsk fordi koden ser riktig ut og feilen først synes et helt annet sted.
- Du endrer lista mens du løkker over den 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[:]`.
- Du tror .copy() kopierer alt innholdet `b = a.copy()` lager en ny ytre liste, men elementene inni er de samme objektene. Er lista nøstet, deler kopiene fortsatt de indre listene: endrer du `b[0][0]`, endrer du også `a[0][0]`. Kopien er grunn — bare ett lag dypt.
- Du tar ut fra feil ende av køen En kø er først inn, først ut: den som stilte seg først, betjenes først (`pop(0)`). En stakk er sist inn, først ut, som en tallerkenstabel (`pop()`). `pop()` uten argument tar fra slutten — bruker du den i en kø, betjener du den som kom sist.
- Du tror append() legger inn elementene, ikke lista `a.append(b)` legger `b` inn som ETT element — er `b` en liste, får du en liste inni lista. Skal elementene inn hver for seg, trenger du `extend(b)`. Forskjellen viser seg først når du teller: lengden økte med 1 i stedet for med antallet.
- Du tror listemetoder må tilordnes tilbake Strenger kan ikke endres — `tekst.upper()` lager en ny streng du må ta vare på. Lister er motsatt: `liste.append(3)` endrer lista på plass og returnerer `None`. Skriver du `liste = liste.append(3)`, kaster du lista og sitter igjen med `None`.
- Du tror en negativ indeks gir feil 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)`.
Øv på dette
- Lage: gjennomsnitt av en liste
- Sjekk: hvilket element?
- Sjekk: kopierer b = a lista?
- Øving: klassen som tabell
- Begrepssjekk: Lister og ordbøker
- Drill: Python-grunnsyntaks (øvet)
- Kodeløype: Fra fillinjer til data
- Kodeløype: Lister og ordbøker
- Prøvebank: Finn den første — og hvor den står (nivå 1)
- Drill: Python-grunnsyntaks (utfordring)
- Drill: Python-grunnsyntaks — skriv koden
- Kodeløype: Arena — styr roboten
- Drill: Lister og ordbøker (grunnleggende)
- Drill: Lister og ordbøker (øvet)
- Drill: Lister og ordbøker (utfordring)
- Kodeløype: Lister og ordbøker — mønstrene
- Drill: Lister og ordbøker — skriv selv (øvet)
- Drill: Lister og ordbøker — skriv selv (utfordring)
- Prøvebank: Plukk ut radene i en tabell (nivå 1)
- Finn feilen: indeks utenfor lista
- Liste eller ordbok? Velg og begrunn
- Telle stemmer: liste eller ordbok?