Bruk av lister, tupler og ordbøker for lagring og behandling av data.
60 målinger, én variabel
Tenk deg at du kobler en temperatursensor til en mikrokontroller og vil lagre temperaturen hvert minutt i en time. Det blir 60 verdier. Vil du lage 60 separate variabler -- temp1, temp2, helt til temp60? Det ville vært et mareritt. Heldigvis finnes datastrukturer, som lar oss samle mange verdier i én variabel.
I Python er det særlig tre datastrukturer du må kjenne. Lister er fleksible samlinger der vi kan legge til, fjerne og endre elementer. Tupler er uforanderlige samlinger som er låst etter at de er opprettet. Ordbøker lar hver verdi få en nøkkel, akkurat som et oppslagsverk. Vi skal også se hvordan en for-løkke kan gå gjennom alle elementene i en slik struktur -- noe som er gull verdt når du jobber med sensordata.
Lister og tupler
En liste er en ordnet samling av verdier, laget med hakeparenteser. Du kan skrive temperaturer = [22.5, 23.1, 21.8, 24.0, 22.9], eller blande typer som tall og tekst i samme liste. Hvert element har en indeks -- en posisjon -- og her er det viktig: indeksen starter på 0. Så temperaturer[0] er den første verdien (22.5), temperaturer[2] er den tredje (21.8), og temperaturer[-1] er den siste (22.9). Med slicing kan du hente ut en bit: temperaturer[1:3] gir elementene på indeks 1 og 2, altså [23.1, 21.8], mens temperaturer[:2] gir de to første.
Lister har mange nyttige metoder: append(x) legger til på slutten, insert(i, x) setter inn på en posisjon, remove(x) fjerner, pop(i) plukker ut, len() teller, og sort() sorterer. Og siden lister med tall fungerer rett inn i sum(), len(), max() og min(), kan du regne ut gjennomsnittet av en målerekke på én linje: sum(temperaturer) / len(temperaturer).
En tuppel ligner på en liste, men kan ikke endres etter at den er laget. Den skrives med vanlige parenteser, som koordinat = (59.91, 10.75). Indeksering fungerer akkurat som for lister, men prøver du å skrive koordinat[0] = 60.0, får du en feil. Hvorfor bruke noe så stivt? Fordi noen data ikke skal endres -- koordinater, farger, innstillinger. Tupler er dessuten raskere, bruker mindre minne, og kan brukes som nøkler i ordbøker, noe lister ikke kan.
Ordbøker og iterering
Noen ganger holder det ikke å nummerere data -- du vil gi dem navn. Da bruker du en ordbok (dictionary), som lagrer nøkkel-verdi-par med krøllparenteser. En sensor kan beskrives slik: sensor = {"type": "temperatur", "verdi": 22.5, "enhet": "°C"}. Vil du hente verdien, slår du opp med nøkkelen: sensor["type"] gir "temperatur". Du legger til eller endrer like enkelt: sensor["verdi"] = 23.1 endrer en verdi, og sensor["plassering"] = "stue" legger til en helt ny nøkkel. Nyttige metoder er keys(), values(), items() og get(), der den siste lar deg hente en verdi trygt med en standard hvis nøkkelen mangler.
Det virkelig kraftfulle skjer når vi kombinerer datastrukturer med løkker. Iterering betyr å gå gjennom alle elementene, ett om gangen. En for-løkke som for sensor in sensorer: går gjennom hver verdi i en liste. Trenger du indeksen i tillegg, bruker du enumerate(), som gir både posisjon og verdi. For en ordbok bruker du for nøkkel, verdi in sensor.items(): for å få med begge deler.
Iterering gjør det enkelt å filtrere data. Vil du finne alle målinger over 25 grader, kan du gå gjennom listen og bruke append() på en ny liste hver gang temp > 25. Det samme kan skrives kompakt med list comprehension: [temp for temp in malinger if temp > 25]. For-løkken er lettest å forstå, mens list comprehension er kortere -- begge gir samme resultat, og du velger selv hva som passer.
Oppsummering
Vi har samlet mange verdier i én variabel. Lister med [] er fleksible og kan endres, med indeksering fra 0 og slicing for å hente ut deler. Tupler med () er uforanderlige og brukes når data skal stå fast. Ordbøker med {} knytter hver verdi til en nøkkel, slik at vi kan slå opp data ved navn i stedet for posisjon.
Med for-løkker kan vi iterere gjennom alle elementer -- enumerate() gir oss indeks underveis, og items() gir nøkkel og verdi fra en ordbok. List comprehension er en kompakt måte å bygge nye lister på, for eksempel når vi filtrerer ut alle sensormålinger over en grenseverdi. Dette er grunnverktøyene for å håndtere ekte datamengder i programmene dine.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.