Definere funksjoner, parametre, returverdier og gjenbruk av kode.
Lister og datastrukturer
Når du arbeider med data fra eksperimenter og sensorer, trenger du ofte å lagre mange verdier sammen – for eksempel 100 temperaturmålinger, en serie med tidspunkter, eller navnene på ulike kjemiske stoffer. I Python bruker vi lister til dette.
En liste er en ordnet samling av verdier som du kan legge til, fjerne, sortere og lete gjennom. Lister er den mest brukte datastrukturen i Python og er helt sentrale for databehandling i teknologi og forskning.
I dette kapittelet lærer du å:
- Opprette og bruke lister
- Hente ut elementer med indeksering
- Gå gjennom lister med iterasjon
- Bruke innebygde funksjoner for sortering og analyse
En liste er en ordnet samling av verdier, avgrenset med hakeparenteser [] og separert med komma.
# Ulike typer lister:
temperaturer = [18.3, 21.7, 19.5, 23.1, 17.8]
elever = ["Ola", "Kari", "Per", "Liv"]
primtall = [2, 3, 5, 7, 11, 13]
blandet = ["tekst", 42, 3.14, True] # Kan blande typer
tom_liste = [] # Tom listeViktige egenskaper ved lister:
- Ordnet: Elementene har en bestemt rekkefølge
- Indeksert: Hvert element har en indeks (posisjon) som starter på 0
- Foranderlig (mutable): Du kan legge til, fjerne og endre elementer
- Kan inneholde alle datatyper, inkludert andre lister
Lengden til en liste finner du med len():
print(len(temperaturer)) # 5
print(len(tom_liste)) # 0Indeksering – hente ut elementer
Hvert element i en liste har en indeks som starter på 0:
frukter = ["eple", "banan", "appelsin", "druer"]
# indeks: 0 1 2 3Hent ut elementer med hakeparenteser:
print(frukter[0]) # eple (første element)
print(frukter[2]) # appelsin (tredje element)
print(frukter[-1]) # druer (siste element)
print(frukter[-2]) # appelsin (nest siste)Slicing – hent ut en del av listen:
tall = [10, 20, 30, 40, 50, 60]
print(tall[1:4]) # [20, 30, 40] (indeks 1, 2, 3)
print(tall[:3]) # [10, 20, 30] (fra start til indeks 3)
print(tall[3:]) # [40, 50, 60] (fra indeks 3 til slutt)Du kan også endre et element ved å tilordne en ny verdi:
frukter[1] = "mango"
print(frukter) # ["eple", "mango", "appelsin", "druer"]OBS: Hvis du prøver å hente ut en indeks som ikke finnes (f.eks. frukter[10]), får du en IndexError.
Gitt listen temp = [15.2, 18.7, 22.1, 19.8, 24.3, 20.5, 17.6] (syv daglige temperaturmålinger). Finn: a) Temperaturen på dag 1 (indeks 0), b) Temperaturen på den siste dagen, c) Temperaturene fra dag 3 til dag 5.
temp = [15.2, 18.7, 22.1, 19.8, 24.3, 20.5, 17.6]
# a) Dag 1 (indeks 0):
print(f"Dag 1: {temp[0]} °C") # 15.2 °C
# b) Siste dag:
print(f"Siste dag: {temp[-1]} °C") # 17.6 °C
# c) Dag 3 til dag 5 (indeks 2, 3, 4):
print(f"Dag 3–5: {temp[2:5]}") # [22.1, 19.8, 24.3]Husk at indeksering starter på 0, så «dag 1» er indeks 0 og «dag 3» er indeks 2. Ved slicing er startindeksen inkludert, men sluttindeksen er ikke inkludert – temp[2:5] gir indeks 2, 3 og 4.
Gitt data = [10, 20, 30, 40, 50]. Hva er verdien av data[3]?
Python har mange innebygde metoder for å manipulere lister:
| Metode | Beskrivelse | Eksempel |
|---|---|---|
append(x) | Legger til x på slutten | liste.append(42) |
insert(i, x) | Setter inn x på indeks i | liste.insert(0, "ny") |
remove(x) | Fjerner første forekomst av x | liste.remove(42) |
pop(i) | Fjerner og returnerer element på indeks i | liste.pop(2) |
sort() | Sorterer listen (endrer originalen) | liste.sort() |
reverse() | Snur rekkefølgen | liste.reverse() |
count(x) | Teller forekomster av x | liste.count(5) |
index(x) | Finner indeks til første x | liste.index("Ola") |
Innebygde funksjoner som virker på lister:
| Funksjon | Beskrivelse | Eksempel |
|---|---|---|
len(liste) | Antall elementer | len([1, 2, 3]) → 3 |
sum(liste) | Summen av tallene | sum([1, 2, 3]) → 6 |
min(liste) | Minste verdi | min([3, 1, 2]) → 1 |
max(liste) | Største verdi | max([3, 1, 2]) → 3 |
sorted(liste) | Ny sortert kopi | sorted([3, 1, 2]) → [1, 2, 3] |
Bygge opp lister dynamisk
I teknologi og forskning bygger vi ofte opp lister trinn for trinn – for eksempel ved å lese inn sensordata i en løkke:
malinger = [] # Start med tom liste
for i in range(5):
verdi = float(input(f"Måling {i + 1}: "))
malinger.append(verdi) # Legg til ny måling
print(f"Du skrev inn: {malinger}")
print(f"Gjennomsnitt: {sum(malinger) / len(malinger):.1f}")Forskjellen mellom sort() og sorted():
tall = [5, 2, 8, 1, 9]
# sort() endrer originalen:
tall.sort()
print(tall) # [1, 2, 5, 8, 9] (originalen er endret)
# sorted() lager en ny liste:
tall = [5, 2, 8, 1, 9]
ny = sorted(tall)
print(ny) # [1, 2, 5, 8, 9] (ny sortert liste)
print(tall) # [5, 2, 8, 1, 9] (originalen er uendret)Bruk sorted() når du vil beholde originalen, og .sort() når du er ferdig med den opprinnelige rekkefølgen.
Du har målt pH-verdier i en elv på 8 ulike steder: [7.2, 6.8, 7.5, 6.3, 7.1, 6.9, 7.8, 6.5]. Skriv et program som finner gjennomsnitt, høyeste og laveste verdi, sorterer målingene og teller hvor mange som er under 7.0 (sur).
ph_verdier = [7.2, 6.8, 7.5, 6.3, 7.1, 6.9, 7.8, 6.5]
# Grunnleggende statistikk:
gjennomsnitt = sum(ph_verdier) / len(ph_verdier)
hoyest = max(ph_verdier)
lavest = min(ph_verdier)
# Tell sure prøver (pH < 7.0):
antall_sure = 0
for ph in ph_verdier:
if ph < 7.0:
antall_sure = antall_sure + 1
# Sortert oversikt:
sortert = sorted(ph_verdier)
print(f"Antall målinger: {len(ph_verdier)}")
print(f"Gjennomsnitt pH: {gjennomsnitt:.2f}")
print(f"Laveste pH: {lavest}")
print(f"Høyeste pH: {hoyest}")
print(f"Sortert: {sortert}")
print(f"Antall sure prøver (pH < 7): {antall_sure}")Utskrift:
Antall målinger: 8
Gjennomsnitt pH: 7.01
Laveste pH: 6.3
Høyeste pH: 7.8
Sortert: [6.3, 6.5, 6.8, 6.9, 7.1, 7.2, 7.5, 7.8]
Antall sure prøver (pH < 7): 4Hva skriver følgende kode ut?
tall = [3, 1, 4, 1, 5]
tall.append(9)
tall.sort()
print(tall[0], tall[-1])Metode 1: Direkte iterasjon (vanligst)
farger = ["rød", "grønn", "blå"]
for farge in farger:
print(farge)Metode 2: Iterasjon med indeks
for i in range(len(farger)):
print(f"Indeks {i}: {farger[i]}")Metode 3: enumerate() – gir både indeks og verdi
for i, farge in enumerate(farger):
print(f"{i}: {farge}")List comprehension – en kompakt måte å lage nye lister:
tall = [1, 2, 3, 4, 5]
kvadrater = [x ** 2 for x in tall]
print(kvadrater) # [1, 4, 9, 16, 25]
# Med betingelse:
store = [x for x in tall if x > 3]
print(store) # [4, 5]List comprehension er spesielt nyttig for databehandling – for eksempel å filtrere ut målinger som overstiger en grenseverdi.
Du har en liste med 10 lysmålinger (i lux): [450, 120, 890, 35, 670, 15, 780, 200, 950, 80]. Skriv et program som filtrerer ut alle målinger under 100 lux (mørke forhold) og beregner gjennomsnittet av de gjenværende målingene.
malinger = [450, 120, 890, 35, 670, 15, 780, 200, 950, 80]
# Filtrer med list comprehension:
lyse = [m for m in malinger if m >= 100]
morke = [m for m in malinger if m < 100]
print(f"Alle målinger: {malinger}")
print(f"Lyse målinger (>= 100 lux): {lyse}")
print(f"Mørke målinger (< 100 lux): {morke}")
if len(lyse) > 0:
snitt = sum(lyse) / len(lyse)
print(f"Gjennomsnitt (uten mørke): {snitt:.0f} lux")Utskrift:
Alle målinger: [450, 120, 890, 35, 670, 15, 780, 200, 950, 80]
Lyse målinger (>= 100 lux): [450, 120, 890, 670, 780, 200, 950]
Mørke målinger (< 100 lux): [35, 15, 80]
Gjennomsnitt (uten mørke): 580 luxList comprehension [m for m in malinger if m >= 100] lager en ny liste med bare de verdiene som oppfyller betingelsen. Dette er en svært nyttig teknikk for å filtrere eksperimentdata.
Hva blir resultatet av følgende kode?
tall = [2, 4, 6, 8, 10]
resultat = [x * 3 for x in tall if x > 5]
print(resultat)I tillegg til lister har Python dictionaries (ordbøker) som lagrer data som nøkkel-verdi-par:
sensor = {
"type": "temperatur",
"enhet": "°C",
"verdi": 22.5,
"sted": "Oslo"
}
print(sensor["verdi"]) # 22.5
print(sensor["sted"]) # Oslo
sensor["verdi"] = 23.1 # Endre verdi
sensor["tid"] = "14:30" # Legge til nytt parDictionaries er nyttige for å lagre strukturerte data der hver verdi har et beskrivende navn (nøkkel), for eksempel sensoravlesninger med metadata.
Oppsummering – Lister og datastrukturer
Du har lært å arbeide med Pythons viktigste datastruktur:
| Konsept | Forklaring | Eksempel |
|---|---|---|
| Opprette liste | Hakeparenteser med komma | [1, 2, 3] |
| Indeksering | Hente element med posisjon | liste[0], liste[-1] |
| Slicing | Hente en del av listen | liste[1:4] |
| append() | Legge til på slutten | liste.append(x) |
| sort() / sorted() | Sortere listen | liste.sort() |
| len/sum/min/max | Innebygde funksjoner | sum(liste) |
| List comprehension | Kompakt listebygging | [x**2 for x in tall] |
| Iterasjon | Gå gjennom alle elementer | for x in liste: |
Viktige prinsipper:
- Indeksering starter alltid på 0
- Negative indekser teller bakfra (
-1 = siste)- Ved slicing er sluttindeksen ikke inkludert
-
sort() endrer originallisten, sorted() lager en kopiLister er uunnværlige for databehandling – fra innsamling av sensordata til analyse og presentasjon av resultater.
Skriv et Python-program som ber brukeren om å skrive inn karakterer (heltall 1–6) til de skriver «ferdig». Programmet skal lagre karakterene i en liste og deretter skrive ut: antall karakterer, gjennomsnittskarakteren (med én desimal), beste og dårligste karakter, og listen sortert fra best til dårligst.
Skriv et program som simulerer et enkelt værstasjons-datasystem. Programmet skal: a) Generere 30 tilfeldige temperaturmålinger mellom -10.0 og 30.0 °C (bruk random.uniform(-10, 30)). b) Beregne gjennomsnitt, medianen (midtverdi i sortert liste), høyeste og laveste temperatur. c) Telle antall dager med frost (under 0 °C), lune dager (0–20 °C) og varme dager (over 20 °C). d) Skrive ut en pent formatert rapport med alle resultatene.
Skriv et program som leser inn en liste med navn og tilhørende poeng (fra en konkurranse). Programmet skal: a) Be brukeren skrive inn navn og poeng for minst 5 deltakere (lagre i to parallelle lister). b) Finne og skrive ut vinneren (den med flest poeng). c) Sortere deltakerne etter poeng (synkende) og skrive ut en resultatliste med plassering. Bruk funksjoner for å strukturere programmet.
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.