Definere funksjoner, parametre, returverdier og gjenbruk av kode.
Lister og datastrukturar
Når du arbeider med data frå eksperiment og sensorar, treng du ofte å lagre mange verdiar saman – til dømes 100 temperaturmålingar, ein serie med tidspunkt, eller namna på ulike kjemiske stoff. I Python brukar vi lister til dette.
Ei liste er ei ordna samling av verdiar som du kan leggje til, fjerne, sortere og leite gjennom. Lister er den mest brukte datastrukturen i Python og er heilt sentrale for databehandling i teknologi og forsking.
I dette kapittelet lærer du å:
- Opprette og bruke lister
- Hente ut element med indeksering
- Gå gjennom lister med iterasjon
- Bruke innebygde funksjonar for sortering og analyse
Ei liste er ei ordna samling av verdiar, avgrensa med hakeparentesar [] og skild 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 eigenskapar ved lister:
- Ordna: Elementa har ei bestemt rekkjefølgje
- Indeksert: Kvart element har ein indeks (posisjon) som startar på 0
- Foranderleg (mutable): Du kan leggje til, fjerne og endre element
- Kan innehalde alle datatypar, inkludert andre lister
Lengda til ei liste finn du med len():
print(len(temperaturer)) # 5
print(len(tom_liste)) # 0Indeksering – hente ut element
Kvart element i ei liste har ein indeks som startar på 0:
frukter = ["eple", "banan", "appelsin", "druer"]
# indeks: 0 1 2 3Hent ut element med hakeparentesar:
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 ein del av lista:
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 òg endre eit element ved å tilordne ein ny verdi:
frukter[1] = "mango"
print(frukter) # ["eple", "mango", "appelsin", "druer"]OBS: Dersom du prøver å hente ut ein indeks som ikkje finst (f.eks. frukter[10]), får du ein IndexError.
Gitt lista temp = [15.2, 18.7, 22.1, 19.8, 24.3, 20.5, 17.6] (sju daglege temperaturmålingar). Finn: a) Temperaturen på dag 1 (indeks 0), b) Temperaturen på den siste dagen, c) Temperaturane frå 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]Hugs at indekseringa startar på 0, så «dag 1» er indeks 0 og «dag 3» er indeks 2. Ved slicing er startindeksen inkludert, men sluttindeksen er ikkje inkludert – temp[2:5] gir indeks 2, 3 og 4.
Gitt data = [10, 20, 30, 40, 50]. Kva er verdien av data[3]?
Python har mange innebygde metodar for å manipulere lister:
| Metode | Skildring | Døme |
|---|---|---|
append(x) | Legg til x på slutten | liste.append(42) |
insert(i, x) | Set inn x på indeks i | liste.insert(0, "ny") |
remove(x) | Fjernar første førekomst av x | liste.remove(42) |
pop(i) | Fjernar og returnerer element på indeks i | liste.pop(2) |
sort() | Sorterer lista (endrar originalen) | liste.sort() |
reverse() | Snur rekkjefølgja | liste.reverse() |
count(x) | Tel førekomstar av x | liste.count(5) |
index(x) | Finn indeks til første x | liste.index("Ola") |
Innebygde funksjonar som verkar på lister:
| Funksjon | Skildring | Døme |
|---|---|---|
len(liste) | Tal på element | len([1, 2, 3]) → 3 |
sum(liste) | Summen av tala | 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] |
Byggje opp lister dynamisk
I teknologi og forsking byggjer vi ofte opp lister trinn for trinn – til dømes ved å lese inn sensordata i ei 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}")Skilnaden 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 behalde originalen, og .sort() når du er ferdig med den opphavlege rekkjefølgja.
Du har målt pH-verdiar i ei elv på 8 ulike stader: [7.2, 6.8, 7.5, 6.3, 7.1, 6.9, 7.8, 6.5]. Skriv eit program som finn gjennomsnitt, høgaste og lågaste verdi, sorterer målingane og tel kor 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): 4Kva skriv følgjande kode ut?
tall = [3, 1, 4, 1, 5]
tall.append(9)
tall.sort()
print(tall[0], tall[-1])Metode 1: Direkte iterasjon (vanlegast)
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 – ein kompakt måte å lage nye lister på:
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 – til dømes å filtrere ut målingar som overstig ein grenseverdi.
Du har ei liste med 10 lysmålingar (i lux): [450, 120, 890, 35, 670, 15, 780, 200, 950, 80]. Skriv eit program som filtrerer ut alle målingar under 100 lux (mørke forhold) og reknar ut gjennomsnittet av dei attståande målingane.
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] lagar ei ny liste med berre dei verdiane som oppfyller vilkåret. Dette er ein svært nyttig teknikk for å filtrere eksperimentdata.
Kva blir resultatet av følgjande 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 lagrar 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 kvar verdi har eit skildrande namn (nøkkel), til dømes sensoravlesingar med metadata.
Oppsummering – Lister og datastrukturar
Du har lært å arbeide med den viktigaste datastrukturen i Python:
| Konsept | Forklaring | Døme |
|---|---|---|
| Opprette liste | Hakeparentesar med komma | [1, 2, 3] |
| Indeksering | Hente element med posisjon | liste[0], liste[-1] |
| Slicing | Hente ein del av lista | liste[1:4] |
| append() | Leggje til på slutten | liste.append(x) |
| sort() / sorted() | Sortere lista | liste.sort() |
| len/sum/min/max | Innebygde funksjonar | sum(liste) |
| List comprehension | Kompakt listebygging | [x**2 for x in tall] |
| Iterasjon | Gå gjennom alle element | for x in liste: |
Viktige prinsipp:
- Indekseringa startar alltid på 0
- Negative indeksar tel bakfrå (
-1 = siste)- Ved slicing er sluttindeksen ikkje inkludert
-
sort() endrar originallista, sorted() lagar ein kopiLister er uunnverlege for databehandling – frå innsamling av sensordata til analyse og presentasjon av resultat.
Skriv eit Python-program som ber brukaren om å skrive inn karakterar (heiltal 1–6) til dei skriv «ferdig». Programmet skal lagre karakterane i ei liste og deretter skrive ut: talet på karakterar, gjennomsnittskarakteren (med éin desimal), beste og dårlegaste karakter, og lista sortert frå best til dårlegast.
Skriv eit program som simulerer eit enkelt vêrstasjons-datasystem. Programmet skal: a) Generere 30 tilfeldige temperaturmålingar mellom -10.0 og 30.0 °C (bruk random.uniform(-10, 30)). b) Rekne ut gjennomsnitt, medianen (midtverdi i sortert liste), høgaste og lågaste temperatur. c) Telje talet på dagar med frost (under 0 °C), lune dagar (0–20 °C) og varme dagar (over 20 °C). d) Skrive ut ein pent formatert rapport med alle resultata.
Skriv eit program som les inn ei liste med namn og tilhøyrande poeng (frå ein konkurranse). Programmet skal: a) Be brukaren skrive inn namn og poeng for minst 5 deltakarar (lagre i to parallelle lister). b) Finne og skrive ut vinnaren (den med flest poeng). c) Sortere deltakarane etter poeng (synkande) og skrive ut ei resultatliste med plassering. Bruk funksjonar 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.