Information om denne video
Underviser: Simon Rotendahl Video: 18:48 Lektion nr. 8 af 27
Jeg har en samling af data, hvordan gemmer jeg?
Ofte i programmering, vil du have data, som høre sammen, derfor kan det være smart at gemme det sammen. Det er her lister kommer ind. En liste er en datatype, der kan holder elementer af andre datatyper. Du kan både have en liste af tal, af strenge, ja selv lister, altså en liste af lister.
Vi skal lære om lister, da vi uden dem er meget begrænset, det er utrolig praktisk at kunne samle data på den måde. Lister hænger meget sammen med næste videos tema, nemlig løkker, da vi tit bruger dem sammen. Hvis du f.eks har en masse ølpriser, så kan det være smart at samle dem i en liste, så har du dem nemlig i samme variabel. Du kan så bruge en løkke til at lægge alle priser sammen, og finde gennemsnitsprisen!
Altså hvad sker der, undskyld Simon. Det må være autocorect eftersom min datter hedder Simone
Det er helt okay :)
Hej Simone
ca 10:33 inde i videoen skriver du først
A.append(8) for at få liste A plus 8
Men kort efter skriver du
A.append([18,49])
Hvordan kan det være at du i den første append ikke skriver [] uden om 8 tallet?
Når jeg sætter [] rundt om noget, så bliver det til en liste, så hvis vi ser på f.eks “Simon”, så har vi her en streng pga. “”, og på samme måde har vi [], det er for at indikere at det vi har i mellem [ og ] er en liste. Så når jeg skriver A.append([18, 49]) så tager jeg listen A og sætter listen [18, 49] ind i liste A, hvis jeg havde skrevet A.append(18, 49) så ville jeg få en fejl. Så forskellen er at A.append(8) sætter et tal ind i en liste A.append([18, 49]) sætter en liste ind i en liste. Du ville også kunne skriver A.append([8]) men så sætter du en liste ind i en liste så hvis vi f.eks siger at A = [1,2,3] og du så skriver A.append(8) så vil du få [1,2,3,8], hvor i mod A.append([8]) vil give [1,2,3,[8]].
Jeg håber det gav mening, ellers må du sige til :)
Hvis man arbejder på en bærbar, hvor der kun er “bløde” parenteser og ingen “hårde” parenteser, hvad gør man så?
Hej Sonny,
Det lyder mærkeligt. Lige pt. bruger jeg selv en Mac, men mener at genvejen på Windows er alt+8 og [ og alt+9 for ], vil du prøve det, og hvis det ikke virker, vil du så lige skrive hvilket computer du har, altså mærke og model, så checker jeg op på det :)
Mvh.
Simon
Fandt løsningen så jeg både kan lave [] samt {} ….
Jeg skal benytte “AltGr” + forskellige tal ;-)
Nårrh ja det er AltGr og ikke Alt, det er rigtigt, godt du fandt det, det er en sur ting at sidde fast med ellers :p
Mvh.
Simon
Hej Simon,
Hvordan kan det være, at min kode reagerer på denne måde?
Jeg har sat to inputs ind i funktionen, men giver ikke det ønskede resultat.
___________________________________________________________________________________________________________________________
Funktionen
def findesI(liste, elem):
if elem in liste:
print(“Elementet findes i listen”)
else:
print(“Elementet findes ikke i listen”)
findesI(input(), input())
___________________________________________________________________________________________________________________________
Resultat af koden
A
2
Elementet findes ikke i listen
___________________________________________________________________________________________________________________________
Mvh
Dennis
Det er selvfølgelig med hængende indrykning.
Listen er den samme som i videoen [1,2,3,4,5]
første input er A
andet input er 2
Mvh Dennis
Hej Dennis,
Det kommer af at du bruger input(). Når du bruger input så bliver svaret den næste linje i terminalen, men som en string type, så hvis jeg skriver
T = input()
og skriver 2 i terminalen så er T nu lig med “2” og IKKE 2, den er altså lig med sætningen som bare er et to tal (“2”) og ikke lig med tallet (integer/heltal) to.
Det samme gælder for A, hvis du skriver A i terminalen så bliver det til “A” og ikke den liste som du har kaldt A. Jeg håber det giver mening, og jeg har lige lavet et lille eksempel på linket herunder du kan prøve.
https://replit.com/join/mtzxtzoo-rotendahl
Mvh.
Simon
Super, så når der gøres brug af input(), så er det udelukkende strings, der kan bruges?
Hvor kan man så angive, at man vil tilgå en liste eller en int med brugerinput?
mvh
Dennis
Ja det er udelukkende strings med input funktionen, der er også andre måder at få input på, så som at tilgå filer osv. men det er en anden snak.
Man kan godt det du tænker, men jeg vil fraråde det. Det giver nemlig brugere tæt adgang til computerens hukommelse, hvilket hurtigt giver sikkerhedsproblemer, så jeg ville hellere ud fra brugeres input vælge noget i programmet, i stedet for at bruge brugerens input direkte.
Jeg har ændret lidt på eksemplet fra før, for at vise måde at gøre det på. Først en funktion som kan tage en streng og give listen tilbage (den giver så en fejl hvis du giver den navnet på en liste der ikke findes). Så en funktion som tager en string “1,2,3,4” og laver det til listen [“1″,”2″,”3″,”4”] altså en liste med strenge (så ikke en liste med tal men det er bare lige for eksemplets skyld man kunne godt lave dem til int’s). Til sidst en funktion som tager en streng og ud fra den udvælger hvilken liste der skal bruges.
https://replit.com/@Rotendahl/GivingHungryGzip#main.py
Håber det hjælper og du spørger selvfølgelig bare. Jeg har med vilje ikke uddybet hver enkelt funktion for meget så du selv kan prøve at gennemskue det lidt :)
Mvh.
Simon
#find og print max + min:
print(max([4,5,3,4,9,1]))
print(max(A))
Hvordan bruger jeg max og min funktionerne?
Den øveste giver fint 9, men jeg kan ikke få den nederste til at give maxværdien fra listen.
TypeError: ‘list’ object is not callable
VH Jonas
Hej Jonas,
Har du defineret A til at være en liste? Altså noget i stil med
A=[5,7,6,9]
Og så
print(max(A))
Det lyder på fejlen som om at det mangler.
Hej Simon tak for svar.
Min kone kom heldigvis hjem og fandt problemet, det var fordi jeg havde en liste i liste A, så den kunne ikke sammenligne en liste med en int.
Kan jeg få python til at folde listerne i listen ud og sammenligne alle værdier, altså på tværs af lister i lister. Hvis det er meget kompliceret er det ok bare at svare Ja og så lærer jeg det senere :)
VH Jonas
Det er lidt kompliceret, alt efter hvad man vil. Hvis man kender formen (altså er det en liste at lister, eller er det en liste af lister af lister, osv.) på de lister man vil folde ud (man kalder det faktisk at “flatten” en liste) så er det relativt nemt, og kan gøres med for loops. Hvis man ikke kender formen, så er det lidt svære, og det kræver nogle mere specielle checks.
Så kort sagt hvis det “bare” er sådanne lister [[1,2,3], [1,2,3], [1,2,3], [1,2,3]], så kan det gøre med to for loops, hvor du appender elementet på listen (se kode nederst). Hvis dine lister er af arbitrær form (altså ikke ens) f.eks [[1,2,3], [[1,2,3], [1,2,3]], [1,2,3]], så bliver det mere kompliceret.
def flat(x):
res = []
for underliste in x:
for e in underliste:
res.append(e)
return res