Ei liste kan inneholde elementer av alle datatyper. Vi har sett eksempler på lister med heltall, flyttall, strenger og boolske variabler. Men ei liste kan også inneholde andre lister.
Eksempel 1:
Vi har målt maksimumstemperaturen i en by hver dag i tre uker, og har laget følgende oversikt
| |
Dag 1 |
Dag 2 |
Dag 3 |
Dag 4 |
Dag 5 |
Dag 6 |
Dag 7 |
| Uke 1 |
12 |
10 |
14 |
7 |
8 |
11 |
10 |
| Uke 2 |
10 |
7 |
9 |
6 |
6 |
8 |
15 |
| Uke 3 |
10 |
5 |
3 |
6 |
4 |
3 |
2 |
Her kan vi representere hver uke som ei liste med 7 elementer i Pyton:
grader_uke_1 = [12, 10, 14, 7, 8, 11, 10]
grader_uke_2 = [10, 7, 9, 6, 6, 8, 15]
grader_uke_3 = [10, 5, 3, 6, 4, 3, 2]
Disse listene kan vi så sette inn i ei ny liste:
grader = [grader_uke_1, grader_uke_2, grader_uke_3]
I Python Tutor ser det slik ut:

Vi ser at grader_uke_1, grader_uke_2 og grader_uke_3 refererer til hver si liste, mens grader referer til ei liste som igjen refererer til grader_uke_1, grader_uke_2 og grader_uke_3.
Vi kan for så vidt også opprette grader uten å gå veien om ukelistene:
grader = [[12, 10, 14, 7, 8, 11, 10], [10, 7, 9, 6, 6, 8, 15], [10, 5, 3, 6, 4, 3, 2]]
I eksempel 1 har vi ei liste som inneholder 3 elementer som hver er lister med 7 elementer. For å referere til et enkeltelement må vi da bruke to indekser. Én for å velge ei av listene, og én for å velge et element i denne lista igjen. Indeksene starter på 0, så hvis vi har opprettet grader slik som i eksempel 1, og skriver
print(grader[0][2])
får vi skrevet ut 14 fordi element nummer 0 i grader er lista grader_uke_1, og element nummer 2 i grader_uke_1 er 14.
Generelt vil indeksene [m][n] gi et element med indeks n i lista med indeks m.
Oppgave 1:
Basert på lista grader fra eksempel 1, avgjør hva som blir skrevet ut hvis vi kjører følgende kode:
print(grader[1][2])
print(grader[2][1])
print(grader[0])
Gjør oppgaven på papir først, og sjekk så ved å kjøre koden om du har rett.
Se løsningsforslag
Vil vi gjennomløpe alle elementene i ei liste med lister, må vi ha to nøstede løkker.
Eksempel 2:
Vi har opprettet lista grader som i eksempel 1, og skal finne den høyeste temperaturen i løpet av de tre ukene. Det kan vi gjøre ved hjelp av følgende Python-kode:
maks_grader = grader[0][0]
for grader_uke in grader:
for grader_dag in grader_uke:
if grader_dag > maks_grader:
maks_grader = grader_dag
print(f"Høyeste temperatur var {maks_grader} grader.")
I eksempel 2 tar vi utgangspunkt i temperaturen første dag i første uke, og leter så gjennom resten av lista for å se om vi finner noe høyere. Her bruker vi altså to nøstede løkker. Koden
for grader_uke in grader:
vil tilordne liste for liste fra grader til grader_uke, ei liste for hvert gjennomløp i den ytre løkka.
I den indre løkka vil koden
for grader_dag in grader_uke:
tilordne tall for tall i lista grader_uke til grader_dag, ett tall for hvert gjennomløp i den indre løkka.
Legg merke til at grader_uke i den ytre løkka er ei liste, mens grader_dag i den indre løkka er et tall.
Vi kan ikke bruke Python-funksjonen max() til å finne den høyeste temperaturen. max(grader) vil returnere lista for uka med den høyeste summen av temperaturer i stedet for den høyeste enkelttemperaturen.
Det er ikke noen teoretisk grense for hvor mange lister vi kan ha inni hverandre, men i praksis er det sjelden behov for mer enn 2-3.
Lister som ligger inni ei annen liste, trenger ikke være like store.
Eksempel 3:
Koden under oppretter lista diverse, som inneholder 2 lister med henholdsvis 3 og 5 elementer.
diverse = [[1, 2, 3], [1, 2, 3, 4, 5]]
Kilder
-
- Matthes A. (2019). Python Crash Course. no starch press
Den som er vant med å programmere i språk som C, vil kanskje lure på hvorfor vi ikke har pekere i Python. Men ser vi på bildet fra Python Tutor over, skjønner vi at vi har pekere, de er bare implisitte. I eksempel 1 er for eksempel grader en peker til ei liste som inneholder pekere til tre andre lister.