Utforskning 5
Denne uken skal vi se på noen eksempler på lister og hva man kan gjøre med dem.
Basics
Du kan bruke len
for å finne antall elementer i en liste.
a = [5, 7, 2, 9, 10]
print(f'{a = }')
print(f'{len(a) = }')
Du kan bruke in
-operatoren for å sjekke om en verdi finnes i en liste.
a = [5, 7, 2, 9, 10]
if 9 in a:
print(f"9 is in the list {a = }!")
Lister kan ha blandede typer.
b = [5, "str", [0.1, 0.2], 9.3]
print(f'{b = }')
Vi kan sette sammen lister.
a = [5, 7, 2, 9, 10]
b = [5, "str", [0.1, 0.2], 9.3]
c = a + b
print(f"{c = }")
Indekser
Hvert element i en liste har en indeks, dette tilsvarer elementets posisjon i listen. Det første elementet har indeks 0
, neste har indeks 1
, og så videre. Vi kan bruke indeks for å få hente ut verdien på en viss posisjon i listen.
Vi kommer til verdien på indeks i ved å skrive liste[i]
.
en_liste = ["a", "b", "c", "d", "e"]
print(f"{en_liste = }")
print(f"{en_liste[0] = }")
print(f"{en_liste[1] = }")
Siden indeks begynner på 0 så kommer det siste elementet ha indeks én mindre enn lengden av listen.
en_liste = ["a", "b", "c", "d", "e"]
print(f"{en_liste[4] = }")
print(f"{en_liste[5] = }") # Krasjer, IndexError: list index out of bounds
Indeks på siste elementet er alltid lengden av listen minus én.
en_liste = ["a", "b", "c", "d", "e"]
print(f"{en_liste[len(en_liste) - 1] = }")
Men vi kan også få det siste elementet ved å skrive kun [-1]. Python subtraherer negative indeksverdier fra len() automatisk
en_liste = ["a", "b", "c", "d", "e"]
print(f"{en_liste[-1] = }")
Vi kan også mutere verdiene i listen ved å bruke indeks.
en_liste = ["a", "b", "c", "d", "e"]
print(f"{en_liste = }")
print("Vi muterer listen ved å skrive: en_liste[2] = 'å'")
en_liste[2] = "å"
print(f"{en_liste = }")
Beskjæring
Vi kan bruke beskjæring (engelsk: slicing) for å klippe ut en del av en liste.
Vi kan få ut dellisten fra og med index \(i\) til og opp til men ikke inkludert \(j\) ved å skrive [i:j]
rett etter listen.
en_liste = ["a", "b", "c", "d", "e"]
print(f"{en_liste[1:4] = }")
Vi kan hoppe med ulike steg-lengder (akkurat som med range-funksjonen).
en_liste = ["a", "b", "c", "d", "e"]
print(f"{en_liste[0:5:2] = }") # en_liste[start:stop:step]
Vi kan bruke negative steg.
en_liste = ["a", "b", "c", "d", "e"]
print(f"{en_liste[3:1:-1] = }")
Vi må ikke angi start og/eller stop om vi vil gå helt fra start og/eller helt til slutten.
en_liste = ["a", "b", "c", "d", "e"]
print(f"{en_liste[:3] = }")
print(f"{en_liste[3:] = }")
print(f"{en_liste[3::-1] = }")
print(f"{en_liste[:] = }")
Eksempel 3: Listefunksjoner
Her er noen ulike metoder man kan bruke på lister. Du kan finne flere på Python sin offisielle dokumentasjon.
a = [5, 7, 2, 9, 10]
print(f"{a = }")
# .append()
a.append(7)
print(f"We append 7: {a}")
# .insert()
a.insert(2, 6)
print(f"We insert 6 at index 2: {a}")
# .reverse()
a.reverse()
print(f"We reverse a: {a}")
# .remove()
a.remove(7)
print(f"We remove the first occurence of 7: {a}")
# .sort()
a.sort()
print(f"We sort a: {a}")
Eksempel 4: Vanlige løkkestrukturer
Følgende er noen eksempler på en vanlig løkkestruktur når vi jobber med lister.
Summere alle alementer i en lisete med tall.
def my_sum(numbers):
# Instansiere en variabel å bygge på.
running_total = 0
# Kjør en for-løkke som bygger opp verdien i variabelen.
for number in numbers:
running_total += number
return running_total
num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
total = my_sum(num_list)
print(f'{total = }')
Beregner minimum av en liste med helltall.
def my_min(numbers):
# Instansiere en variabel å bygge på.
minimum = numbers[0]
# Kjør en for-løkke som bygger opp verdien i variabelen.
for number in numbers:
if number < minimum:
minimum = number
return minimum
num_list = [1, 2, -3, 4, 5, -6, 7, 8, 9, 10]
minimum = my_min(num_list)
print(f'{minimum = }')
Returnerer alle verdiene i lista xs
som er større enn lower_bound
.
def filter_greater_than(xs, lower_bound):
# Instansiere en variabel å bygge på.
filtered_list = []
# Kjør en for-løkke som bygger opp verdien i variabelen.
for number in xs:
if number > lower_bound:
filtered_list.append(number)
return filtered_list
num_list = [1, 2, -3, 4, 5, -6, 7, 8, 9, 10]
filtered_list = filter_greater_than(num_list, 4)
print(f'{filtered_list = }')
Eksempel 5: Tupler
Tupler er litt som en liste, men bruker ()
isteden for []
. Vi bruker vanligvis tupler for objekter hvor lengden ikke vil endres, dvs. antall objekter/elementer forventes å være statiske. Det er noen viktige forskjeller på tupler og lister som vi skal se på seinere. I dette eksempelet lager vi noen tupler og ser hvordan de kan brukes.
# a tuple with three elements:
bergen = ("rain", 60.39, 5.32) # bergen weather, latitude, longitude
# a tuple with one element
# (notice the comma - what happens if you remove the comma?)
bergen_weather = ("rain",)
print("Two tuples:")
print(f"bergen = {bergen}\nbergen_weather = {bergen_weather}\n")
Vi kan “pakke opp” en tupel til flere variabler.
bergen = ("rain", 60.39, 5.32)
(weather, latitude, longitude) = bergen
print(f"weather = {weather}")
print(f"latitude = {latitude}")
print(f"longitude = {longitude}")
Lister over tupler.
# here is a list of tuples
bergen_temp_forecast = [
(16.0, "onsdag"),
(14.0, "torsdag"),
(13.0, "fredag"),
]
# we can unpack them automatically while going through the list
for temp, day in bergen_temp_forecast:
print(f"På {day} blir det {temp} grader.")
Eksempel 6: Mutasjon
Lister, tupler og strenger er like på mange måter, hovedforskjellen er at listene kan muteres (endres), mens tupler ikke kan muteres.
Her er noen eksempler på forskjellen mellom lister (som kan muteres) og tupler (som er uforanderlige, engelsk: immutable).
a = [2, 4, 8, 16]
b = a
c = a[:]
print(f"{a = }\n{b = }\n{c = }")
print("Muterer a:")
a[0] = 42
print(f"{a = }\n{b = }\n{c = }")
print("Muterer b:")
b[1] = 111
print(f"{a = }\n{b = }\n{c = }")
# Tupler (og strenger) er ikke muterbare
a = (2, 4, 8, 16)
b = a
c = a
d = a[:]
print(f"{a = }\n{b = }\n{c = }")
print("Prøver å mutere a:")
a[0] = 42 # Krasjer
I noen tilfeller gjør tilsynelatende samme operasjon ulike ting.
print("Lister v1")
a = [1, 2, 3]
b = a
print(f" {a = }\n {b = }")
print("Utfører a += [42, 43]")
a += [42, 42] # Muterer listen
print(f" {a = }\n {b = }")
print()
print("Tupler")
a = (1, 2, 3)
b = a
print(f" {a = }\n {b = }")
print("Utfører a += (42, 43)")
a += (42, 42) # Oppretter en ny tupel
print(f" {a = }\n {b = }")
print()
print("Lister v2")
a = [1, 2, 3]
b = a
print(f" {a = }\n {b = }")
print("Utfører a = a + [42, 43]")
a = a + [42, 42] # Oppretter en ny liste
print(f" {a = }\n {b = }")
print()