Innhold
Lister
Vi har lista demo, som ser slik ut:
"a" |
"b" |
"c" |
"d" |
"e" |
demo[1] = demo[2] demo[3] = demo[4]
Vi husker at indeksering starter på 0, så elementet med indeks 1 er "b", elementet med indeks 2 er "c", elementet med indeks 3 er "d", og elementet med indeks 4 er "e".
Så først erstattes "b" med "c", og lista ser slik ut:
"a" |
"c" |
"c" |
"d" |
"e" |
"d" med "e", og lista ser slik ut:"a" |
"c" |
"c" |
"e" |
"e" |
Vi kontrollerer ved å skrive kode som først oppretter demo, deretter gjør endringene, og til slutt skriver demo ut:
demo = ["a", "b", "c", "d", "e"] demo[1] = demo[2] demo[3] = demo[4] print(demo)0
Vi får skrevet ut ['a', 'c', 'c', 'e', 'e'].
Vi har lista demo, med 5 elementer, og skal forklare hvorfor vi får feilmeldingen "IndexError: list index out of range" når vi skriver
print(demo[5])
Siden indeksering starter på 0, refererer demo[5] til et sjette element som ikke finnes, og vi får derfor en feilmelding.
Vi oppretter variabelen diverse slik:
diverse = [3, "2", 1.0]
Så skal vi avgjøre hvilken datatype følgende da har:
-
diverse. Dette er ei liste.diverse[0]. Dette er element 0 i lista diverse, som er et heltall.diverse[1]. Dette er element 1 i lista diverse, som er en streng.diverse[2]. Dette er element 2 i lista diverse, som er et flyttall.
For å sjekke kjører vi koden
diverse = [3, "2", 1.0] print(type(diverse)) print(type(diverse[0])) print(type(diverse[1])) print(type(diverse[2]))
Opprette lister
Vi skal skrive kode for å opprette følgende:
-
- Ei liste som heter lottotrekning og inneholder tallene 2, 9, 10, 15, 16, 22 og 26.
- Ei liste som heter basis og inneholder 10 tall som alle er lik 1.
- Ei liste som heter hurra og inneholder 3 strenger som alle er
"hipp". - Ei liste som heter lottotall og inneholder tallene fra og med 1 til og med 34.
Etterpå skal vi bruke print() for å sjekke at listene er blitt riktige.
I lottotrekning er det ikke noe system i tallene, så vi må opprette lista ved å ramse opp innholdet:
lottotrekning = [2, 9, 10, 15, 16, 22]
I basis skal alle tallene være lik 1, så vi kan opprette lista ved å angi et element som er 1, og så indikere at dette skal gjentas 10 ganger:
basis = [1] * 10
hurra følger samme mønster som basis, så vi skriver:
hurra = ["hipp"] * 3
I lottotall skal tallene være en følge fra 1 til 34, så lista kan vi opprette ved å bruke list() og range():
lottotall = list(range(1, 35))
For å sjekke innholdet, skriver vi
print(lottotrekning) print(basis) print(hurra) print(lottotall)
Liste-metoder
Vi skal skrive Python-kode som oppretter lista demo, som ser slik ut:
| 7 | -3 | 8 | 4 | 8 |
Deretter skal vi skrive Python-kode som
-
- Legger til 9 på slutten.
- Setter inn −4 foran elementet med indeks 3.
- Fjerner og skriver ut elementet med indeks 1.
- Fjerner elementet med verdi 4.
- Utvider lista med lista [6, 3, 5].
Vi oppretter først lista
demo = [7, -3, 8, 4, 8]
For å legge til 9 på slutten skriver vi
demo.append(9)
For å sette inn −4 foran elementet med indeks 3 skriver vi
demo.insert(3, -4)
For å fjerne og skrive ut elementet med indeks 1 skriver vi
print(demo.pop(1))
For å fjerne verdien 4 skriver vi
demo.remove(4)
For å utvide lista med lista [6, 3, 5] skriver vi
demo.extend([6, 3, 5])
<eller
demo += [6, 3, 5]
Etter hver operasjon skriver vi lista ut:
print(demo)
Lister i Python Tutor
Vi skal forsøke å forutse hva som vil skje i Python Tutor når vi kjører koden under, linje for linje.
kvadrattall = []
for n in range(1, 5):
kvadrattall.append(n**2)
Ved første klikk på «Next >» opprettes kvadrattall som en variabel med ei pil til ei tom liste. Ved andre klikk opprettes n som en variabel med verdi 1. Ved tredje klikk legges n2, det vil si 12 = 1 inn som første element i lista. Ved påfølgende klikk økes verdien til n med 1, og n2 legges til bakerst i lista. Dette fortsetter inntil n har fått verdien 4, og 42 = 16 er lagt til. (Vi husker at sluttverdien i range() ikke tas med, så 4 er siste verdi for n.) Resultatet ser slik ut:

Gjennomløpe lister
Vi skal skrive Python-kode som oppretter ei liste som inneholder alle oddetall fra og med 1 til og med 19, og skriver dem ut, ett for ett.
For å generere oddetallene skriver vi range(1, 21, 2), som vil generere tall i skritt på 2 fra og med 1 inntil 21. (Det vil gjøre samme nytte å bruke 20 som sluttverdi, men vi holder oss til oddetall for logikkens skyld.) range() bruker vi så som argument til list(). Deretter bruker vi ei for-løkke til å hente ut og skrive ut tallene i lista. Koden kan se ut som vist under. Vi har kalt lista oddeliste, men den kan hete hva som helst.
# Oppretter ei liste med oddetallene fra 1 til 19,
# og skriver dem ut
oddeliste = list(range(1, 21, 2))
for oddetall in oddeliste:
print(oddetall)
Vi skal endre koden fra oppgave 1 slik at også nummeret på oddetallet skrives ut, sammen med litt forklarende tekst. Vi tar da i bruk enumerate() med startverdi 1, og bruker en f-streng i utskriften. Koden kan se slik ut:
# Oppretter ei liste med oddetallene fra 1 til 19,
# og skriver dem ut nummerert
oddeliste = list(range(1, 21, 2))
for nummer, oddetall in enumerate(oddeliste, start = 1):
print(f"Oddetall nummer {nummer} er {oddetall}")
Vi skal endre koden fra oppgave 1 slik at den bruker indekser til å skrive ut lista med oddetallene i omvendt rekkefølge.
Vi bruker da range() til å generere indekser som går fra siste indeks ned til første. Koden kan se ut som vist under.
# Oppretter ei liste med oddetallene fra 1 til 19,
# og skriver dem ut i baklengs rekkefølge
oddeliste = list(range(1, 21, 2))
for n in range(len(oddeliste) - 1, -1, -1):
print(oddeliste[n])
Startverdien til range() blir len(oddeliste) − 1. Vi må trekke fra 1 fordi siste indeks i ei liste med n elementer er n − 1. Sluttverdien blir −1 fordi siste verdi i range() ikke tas med, og vi må ha med tallet 0. Skrittverdien blir −1 fordi vi går nedover i skritt på 1.
Alternativt setter vi startverdien til len(oddeliste) og sluttverdien til 0, og trekker fra 1 når vi bruker indeksen, slik det er vist under.
# Oppretter ei liste med oddetallene fra 1 til 19, # og skriver dem ut i baklengs rekkefølge oddeliste = list(range(1, 21, 2)) for n in range(len(oddeliste), 0, -1): print(oddeliste[n - 1])
«break»
En student har skrevet koden under, som er ment å la brukeren skrive inn en streng, og så skrive ut en melding om strengen inneholder minst én vokal::
# Leser inn streng og sjekker om den inneholder vokal
streng = input("Streng å søke i: ")
for vokal in "aeiouyæøå":
if vokal in streng:
print("Strengen inneholder vokal.")
else:
print("Strengen inneholder ingen vokaler.")
Men koden virker ikke som tenkt, og vi skal forklare hva problemet er og skrive koden riktig.
Problemet er at koden for hver enkelt vokal i strengen "aeiouyæøå" skriver ut om akkurat den vokalen finnes i strengen eller ikke. Her må vi i stedet bruke break og else:
# Leser inn streng og sjekker om den inneholder vokal
streng = input("Streng å søke i: ")
for vokal in "aeiouyæøå":
if vokal in streng:
print("Strengen inneholder vokal.")
break
else:
print("Strengen inneholder ingen vokaler.")
Hvis vi i denne koden finner en vokal i strengen, får vi skrevet ut teksten Strengen inneholder vokal., og gjennomløpet av løkka avbrytes med break. else-blokka blir da ikke utført. Hvis løkka ikke blir avbrutt, men kjøres til siste vokal er sjekket, blir else-blokka utført, og teksten Strengen inneholder ingen vokaler. skrives ut.
Søke i lister
Vi skal skrive kode som oppretter lista ensifrede, som inneholder heltallene fra og med 1 til og med 9, og skriver ut hvor mange av tallene i lista som er delelige med 4.
For å opprette lista bruker vi hintet, og skriver list(range(1, 10)).
Så bruker vi ei for-løkke til å gjennomløpe lista og telle hvor mange tall i lista som er delelige med 4. Koden kan se slik ut:
# Oppretter ei liste med tallene fra 1 til 9, # og teller antall tall delelig med 4 i lista ensifrede = list(range(1, 10)) antall = 0 for tall in ensifrede: if tall % 4 == 0: # Tallet er delelig med 4 antall += 1 print(f"Lista inneholder {antall} tall som er delelige med 4.")
Opprette lister med inline-«for»
Vi har koden under, som oppretter ei liste, y, med kvadratet av heltallene fra 1 til 10.
# Oppretter lista y med tallene 1, 4, 9, ..., 100
y = []
for n in list(range(1, 11))
y.append(n**2)
Så skal vi skrive om koden slik at den bruker inline-for til å opprette y. Koden kan se slik ut:
# Oppretter lista y med tallene 1, 4, 9, ..., 100
y = [n**2 for n in list(range(1, 11))]
Vi har koden under, som oppretter ei liste, x, med heltallene fra 1 til 10, og ei liste, z, med 5n2 + 3n − 4 for hver n i x.
# Oppretter lista x med tallene 1 ... 10, # og lista z med 5*n**2 + 3 * n - 4 for hver n i x x = list(range(1, 11)) z = [] for n in x: z.append(5 * n**2 + 3 * n - 4)
Så skal vi skrive om koden slik at den bruker inline-for til å opprette z. Koden kan se slik ut:
# Oppretter lista x med tallene 1 ... 10, # og lista z med 5n**2 + 3n - 4 for hver n i x x = list(range(1, 11)) z = [5 * n**2 + 3 * n - 4 for n in x]
Dictionaries
Vi skal skrive kode som
-
- Oppretter en dictionary som heter landsprefiks, og inneholder følgende nøkkel-verdi-par:
"Afghanistan": 93,"Albania": 355,"Algerie": 213,"Andorra": 0,"Angola": 244.
- Oppretter en dictionary som heter landsprefiks, og inneholder følgende nøkkel-verdi-par:
Vi oppretter landsprefiks som en dictionary ved å angi par med nøkler og verdier mellom krøllparenteser:
landsprefiks = {
"Afghanistan": 93,
"Albania": 355,
"Algerie": 213,
"Andorra": 0,
"Angola": 244
}
-
- Endrer verdien tilknyttet nøkkelen
"Andorra"til 376 og legger til paret"Anguilla": 1264.
- Endrer verdien tilknyttet nøkkelen
Vi bruker metoden update() og skriver:
landsprefiks.update({"Andorra": 376, "Anguilla": 1264})
Alternativt kan vi skrive
landsprefiks["Andorra"] = 376 landsprefiks["Anguilla"] = 1264
-
- Slår opp og skriver ut verdien knyttet til nøkkelen
"Angola".
- Slår opp og skriver ut verdien knyttet til nøkkelen
Vi bruker metoden get() med "Angola" som nøkkel, og skriver:
print(landsprefiks.get("Angola"))
-
- Slår opp og skriver ut meldingen
"Ukjent land"ved oppslag med nøkkelen"Argentina".
- Slår opp og skriver ut meldingen
Vi bruker igjen get(), men tar med "Ukjent land" som en streng get() skal returnere hvis nøkkelen ikke finnes:
print(landsprefiks.get("Argentina", "Ukjent land"))
Bruke dictionaries
Vi har koden under, som bruker funksjonen randint() fra modulen random til å simulere kast med to terninger, og registrere summen av antall øyne på de to terningene.
from random import randint oyne = randint(1, 6) + randint(1, 6)
Så skal vi skrive Python-kode som gjør en million slike simuleringer og teller opp og skriver ut hvor ofte de forskjellige summene av øyne forekommer. Utskriften skal være sortert på sum øyne.
Vi bruker de samme mekanismene som i eksempelet med å telle forekomster av tegn i en streng. Vi må også ha ei løkke som gjennomløpes en million ganger.
Koden kan se slik ut:
from random import randint
antall = {} # Tom dictionary
for _ in range(1000000):
oyne = randint(1, 6) + randint(1, 6)
# Øk antall forekomster med 1
antall.update({oyne: antall.get(oyne, 0) + 1})
antall = sorted(antall.items())
print(antall)