Lister og indekser
Skrevet av: Ole Kristian Pedersen, Kodeklubben Trondheim
Introduksjon
Denne oppgaven handler om lister, altså å samle flere ting i en og samme variabel. Ettersom lister og løkker henger tett sammen i Python, bør du se på løkker i repetisjonsoppgaven dersom du har glemt hvordan løkker fungerer.
Hvordan lage lister?
Hver ting i en liste kalles et element. En liste lages ved å skrive elementer inni []
, med ,
mellom elementene:
'egg', 'ham', 'spam']
lst
['egg', 'ham', 'spam']
lst = [
Vi har nå ei liste som inneholder ordene 'egg'
, 'ham'
og 'spam'
. Vanskeligere er det ikke! Vi kan også lage tomme lister:
lst = []
lst
[]
Ei liste kan inneholde alt mulig - tall, tekster og også andre lister:
3, 'komma', [1 , 4] ]
lst
[3, 'komma', [1, 4]]
lst = [
Legge til og fjerne elementer
Hva om vi ønsker å legge til eller fjerne elementene fra lista vi vår? Da kan vi bruke de to funksjonene lst.append(elm)
og lst.remove(elm)
, der lst
er lista og elm
er elementet vi ønsker å legge til eller fjerne.
lst.append(elm)
legger til elm
på slutten av lst
, slik som illustrert i eksempelet:
'Per')
lst
['Per']
lst.append('Ada')
lst.append('Kim')
lst
['Per', 'Ada', 'Kim']
lst = []
lst.append(
lst.remove(elm)
sletter det første elementet elm
fra lst
. Det vil si at dersom elm
ligger flere ganger i lst
slettes bare det første elementet lik elm
:
'Per', 'Ada', 'Kim', 'Ada']
lst.remove("Ada")
lst
['Per', 'Kim', 'Ada']
lst = [
Vi skal nå lage et handleliste-program. Programmet skal be brukeren skrive inn matvarer, og deretter skrive ut matvarene når ferdig
skrives inn. Programmet skal fungere slik:
>>> Skriv inn en gjenstand: ost Skriv inn en gjenstand: melk Skriv inn en gjenstand: brød Skriv inn en gjenstand: ferdig ost melk brød
Dette må du gjøre:
-
Hint: Hva slags løkke kan vi bruke her?
-
Hint: Hva slags løkke kan vi bruke her?
Indekser
Tenk deg at vi har ei liste, og ønsker å hente ut det andre elementet i lista. Hvordan skal vi klare det? Da bruker vi noe kalt indeks. Indeks er plassen til elementet og skrives mellom []
rett etter variabelen: lst[index]
. Her er et eksempel på en liste med tall:
1, 2, 3, 4, 5]
lst[1]
2
lst = [
Du la kanskje merke til at vi skrev 1
, men fikk ut det andre elementet i lista? Det er fordi vi begynner å telle fra 0
. Dermed har det første elementet i lista indeks 0
, og det andre har indeks 1
. Datamaskiner begynner å telle på null! Du husker kanskje at det samme skjer når vi bruker range()
?
list(range(5))
[0, 1, 2, 3, 4]
Til nå har vi brukt for element in lst
for å gå igjennom elementene i lista, men noen ganger kan det i tillegg være praktisk å telle hvor langt vi er kommet i lista. Til dette kan vi bruke enumerate()
, som gir oss både verdien og indeksen:
'Per', 'Kim', 'Ada']
for i, value in enumerate(lst):
print(i, value)
0 Per
1 Kim
2 Ada
lst = [
I eksempelet over får i
verdien av indeksen, og value
får verdien av elementet. Det er nesten som ei vanlig for
-løkke, men vi får indeksen i tillegg.
Modifiser nå programmet fra forrige oppgave til å skrive ut indekser ved siden gjenstandene i handlelista. Slik skal det fungere:
>>> Skriv inn en gjenstand: ost Skriv inn en gjenstand: melk Skriv inn en gjenstand: brød Skriv inn en gjenstand: ferdig 0 ost 1 melk 2 brød
Dette må du gjøre:
Indekstrening
Vi vil nå la brukeren selv velge hvor mange gjenstander som skal skrives ut. Slik som i eksempelet:
>>> Skriv inn en gjenstand: ost Skriv inn en gjenstand: melk Skriv inn en gjenstand: brød Skriv inn en gjenstand: ferdig Hvor mange gjenstander vil du skrive ut? 2 0 ost 1 melk
Dette må du gjøre:
Tekster og indekser
Vi kan også bruke indekser på tekster. For eksempel:
"Ada"
s[0]
'A'
s =
Vi skal nå skrive et program som henter input fra brukeren og skriver ut annenhver bokstav. Det skal fungere som dette:
>>> Skriv inn en setning: Hei på deg! H i p e !
Dette må du gjøre:
-
Hint:
tall%2
er resten avtall
delt på2
, hva girtall%2
nårtall
er et partall?
Forbedre denne siden
Funnet en feil? Kunne noe vært bedre?
Hvis ja, vennligst gi oss tilbakemelding ved å lage en sak på Github eller fiks feilen selv om du kan. Vi er takknemlige for enhver tilbakemelding!