Listor
Hittills har vi lagrat data med hjälp av enkla variabler i våra program, så att varje värde har lagrats i en egen variabel. Det här har sina begränsningar – det kan bli arbetsdrygt att tilldela variabler för allt då det finns mycket data att behandla.
I Python är en lista en samling av värden som finns lagrade under samma variabelnamn. Listans värden kallas element och skrivs innanför hakparenteser.
Följande instruktion skapar en ny tom lista…
lista = []
…medan det här instruktionen skapar en lista med fem element:
lista = [7, 2, 2, 5, 2]
Komma åt element i en lista
Elementen i en lista är indexerade på samma sätt som tecken i en sträng. Indexeringen börjar från noll och det sista indexet är listans längd minus ett:
Vi kommer åt ett givet element i listan på samma sätt som för ett specifikt tecken i en sträng, det vill säga med hakparenteser:
lista = [7, 2, 2, 5, 2]
print(lista[0])
print(lista[1])
print(lista[3])
print("Summan av de två första:", lista[0] + lista[1])
7 2 5 Summan av de två första: 9
Vi kan också enkelt skriva ut hela listans innehåll:
lista = [7, 2, 2, 5, 2]
print(lista)
[7, 2, 2, 5, 2]
Till skillnad från strängar är listor föränderliga, vilket betyder att deras innehåll kan ändra. Vi kan inte byta ut ett tecken i en sträng till en annan, men vi kan tilldela ett nytt värde till ett element i en lista. Vi gör det på samma sätt som vi kan tilldela ett nytt värde till en variabel:
lista = [7, 2, 2, 5, 2]
print(lista)
lista[1] = 3
print(lista)
[7, 2, 2, 5, 2] [7, 3, 2, 5, 2]
Funktionen len
returnerar antalet element i en lista:
lista = [7, 2, 2, 5, 2]
print(len(lista))
5
Lägga till element i en lista
Metoden append
lägger till element i slutet av en lista. Metoden fungerar så här:
siffror = []
siffror.append(5)
siffror.append(10)
siffror.append(3)
print(siffror)
[5, 10, 3]
Följande exempel använder sig av två listor:
siffror = []
skonummer = []
siffror.append(5)
siffror.append(10)
siffror.append(3)
skonummer.append(37)
skonummer.append(44)
skonummer.append(40)
skonummer.append(28)
print("Siffror:")
print(siffror)
print("Skonummer:")
print(skonummer)
Elementet läggs till i slutet av den lista som metoden anropas på:
Siffror: [5, 10, 3] Skonummer: [37, 44, 40, 28]
Lägga till ett element på ett specifikt ställe
Om du vill specificera på vilket ställe i en lista ett värde ska läggas till, kan du använda insert
-metoden. Metoden lägger till ett element på ett specifikt index. Alla element vid det här eller senare index flyttar ett index framåt, "mot höger":
Till exempel skriver det här programmet…
tal = [1, 2, 3, 4, 5, 6]
tal.insert(0, 10)
print(tal)
tal.insert(2, 20)
print(tal)
… ut följande:
[10, 1, 2, 3, 4, 5, 6] [10, 1, 20, 2, 3, 4, 5, 6]
Ta bort element från en lista
Det finns två sätt för att ta bort ett element från en lista:
- om man vet indexet för elementet kan man använda
pop
-metoden - om man vet innehållet i elementet kan man använda
remove
-metoden.
pop
-metoden tar indexet för det element som ska avlägsnas som argument. Följande program tar därmed bort elementen på indexen 2 och 3 i listan. När element avlägsnas inifrån en lista ändras naturligt nog indexen för de resterande elementen:
lista = [1, 2, 3, 4, 5, 6]
lista.pop(2)
print(lista)
lista.pop(3)
print(lista)
[1, 2, 4, 5, 6] [1, 2, 4, 6]
Det är bra att minnas att pop
-metoden också returnerar det avlägsnade elementet:
lista = [4, 2, 7, 2, 5]
siffra = lista.pop(2)
print(siffra)
print(lista)
7 [4, 2, 2, 5]
Till skillnad från pop
tar remove
-metoden värdet för det element som ska avlägsnas som argument. Till exempel följande program…
lista = [1, 2, 3, 4, 5, 6]
lista.remove(2)
print(lista)
lista.remove(5)
print(lista)
…skriver ut detta:
[1, 3, 4, 5, 6] [1, 3, 4, 6]
Metoden tar bort det första värdet som motsvarar det givna argumentet från listan – på samma sätt som funktionen find hos strängar returnerar den första delsträngen:
lista = [1, 2, 1, 2]
lista.remove(1)
print(lista)
lista.remove(1)
print(lista)
[2, 1, 2] [2, 2]
Om det givna elementet inte hittas i listan, kommer remove-metoden att ge ett fel. På samma sätt som med strängar kan vi kolla om ett element finns i en lista med hjälp av in
-operatorn:
lista = [1, 3, 4]
if 1 in lista:
print("Listan innehåller värdet 1")
if 2 in lista:
print("Listan innehåller värdet 2")
Listan innehåller värdet 1
Ordna listor
Elementen i en lista kan ordnas från minsta till största med metoden sort
.
lista = [2,5,1,2,4]
lista.sort()
print(lista)
[1, 2, 2, 4, 5]
Notera att den här metoden modifierar själva listan "in-place". Vi vill dock inte alltid ändra på den ursprungliga listan, och då kan vi istället använda funktionen sorted
. Den returnerar en sorterad lista:
lista = [2,5,1,2,4]
print(sorted(lista))
[1, 2, 2, 4, 5]
Kom ihåg skillnaden mellan dessa: sort
ändrar på ordningen i den ursprungliga listan medan sorted
skapar en ny, sorterad kopia av listan. Med sorted
kan vi därmed behålla den ursprungliga listan med dess ursprungliga ordning:
ursprunglig = [2, 5, 1, 2, 4]
ordnad = sorted(ursprunglig)
print(ursprunglig)
print(ordnad)
[2, 5, 1, 2, 4] [1, 2, 2, 4, 5]
Maximi- och minimivärde samt summa
Funktionerna max
och min
returnerar det största respektive minsta värdet i en lista. Funktionen sum
returnerar summan av listans värden.
lista = [5, 2, 3, 1, 4]
storst = max(lista)
minst = min(lista)
summa = sum(lista)
print("Minst:", minst)
print("Störst:", storst)
print("Summa:", summa)
Minst: 1 Störst: 5 Summa: 15
Metoder och funktioner
Det finns två sätt att behandla listor i Python, och det här kan ibland förorsaka huvudbry. Allt som oftast kommer du att använda metoder hos listor – till exempel append
och sort
. De används med punktoperatorn:
lista = []
# metodanrop
lista.append(3)
lista.append(1)
lista.append(7)
lista.append(2)
# metodanrop
lista.sort()
En del funktioner kan ta listor som argument, hit hör till exempel de nyss presenterade funktionerna max
, min
, len
och sorted
:
lista = [3, 2, 7, 1]
# funktionsanrop, lista som argument
storst = max(lista)
minst = min(lista)
langd = len(lista)
print("Minst:", minst)
print("Störst:", storst)
print("Listans längd:", langd)
# funktionsanrop, lista som argument, ordnad lista returneras
sorterad = sorted(lista)
print(sorterad)
Minst: 1 Störst: 7 Listans längd: 4 [1, 2, 3, 7]
Lista som argument eller returvärde
Precis som för de inbyggda funktionerna ovan kan också våra egna funktioner både ta listor som argument och returnera listor som resultat. Följande funktion tar reda på det mellersta – median – värdet i en sorterad lista:
def median(lista: list):
ordnad = sorted(lista)
mellersta = len(ordnad) // 2
return ordnad[mellersta]
Funktionen skapar en sorterad version av listan som gavs som argument och returnerar det mittersta elementet. Lägg märke till att vi här använder heltalsdivisionsoperatorn //
. Indexet i en lista måste vara ett heltal.
Funktionen fungerar på följande sätt:
skonummer = [45, 44, 36, 39, 40]
print("Skonumrens median är", median(skonummer))
aldrar = [1, 56, 34, 22, 5, 77, 5]
print("Medianåldern är", median(aldrar))
Skonumrens median är 40 Medianåldern är 22
En funktion kan också returnera en lista. Följande funktion ber användaren mata in ett heltal, som sedan returneras som en lista:
def las_in_siffror():
siffror = []
while True:
indata = input("Ge siffra (tomt avslutar programmet): ")
if len(indata) == 0:
break
siffror.append(int(indata))
return siffror
Funktionen använder sig av hjälpvariabeln siffror
, som är en lista. Alla siffror som användaren matar in läggs till i listan. När loopen avslutas returnerar funktionen listan (satsen return siffror
).
När funktionen anropas så här…
siffror = las_in_siffror()
print("Största siffran är", max(siffror))
print("Medianvärdet är", median(siffror))
…kan utskriften se ut på följande sätt:
Ge siffra (tomt avslutar programmet): 5 Ge siffra (tomt avslutar programmet): -22 Ge siffra (tomt avslutar programmet): 4 Ge siffra (tomt avslutar programmet): 35 Ge siffra (tomt avslutar programmet): 1 Ge siffra (tomt avslutar programmet): Största siffran är 35 Medianvärdet är 4
Det här lilla exemplet demonstrerar ett av de viktigaste användningsområdena för funktioner: de hjälper dig att dela upp din kod i mindre helheter som är enkla att förstå.
Samma funktionalitet kan förstås åstadkommas utan några som helst egna funktioner:
siffror = []
while True:
indata = input("Ge siffra (tomt avslutar programmet): ")
if len(indata) == 0:
break
siffror.append(int(indata))
ordnad = sorted(siffror)
mellersta = len(ordnad) // 2
median = ordnad[mellersta]
print("Största siffran är", max(siffror))
print("Medianvärdet är", median)
Det kan vara svårare att komma åt logiken i den här versionen av programmet, eftersom det inte är enkelt att se vilka instruktioner som hör till vilken funktionalitet. Koden uppnår samma mål – ta emot data, beräkna medianvärde o.s.v. – men strukturen är mycket mindre tydlig.
Att dela upp din kod i flera funktioner kommer att förbättra läsbarheten och hjälper dig uppfatta logiska helheter. Det här är till nytta när du ska verifiera att programmet fungerar som det ska, eftersom varje funktion kan testas separat.
En annan viktig orsak till att använda funktioner är återanvändbarhet. Om du behöver samma funktionalitet på flera ställen i ditt program är det en bra idé att skapa en funktion och namnge den väl:
print("Skonummer:")
skor = las_in_siffror()
print("Vikter:")
vikter = las_in_siffror()
print("Längder:")
langder = las_in_siffror()
Mer om att behandla listor
Det finns flera sätt till att använda listor i Python. Om du vill läsa mera är Pythons dokumentation ett bra ställe att börja med.
Log in to view the quiz
Se dina poäng genom att klicka på cirkeln nere till höger av sidan.