Osa 4

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:

Lista indeksoidaan nollasta alkaen

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])
Exempelutskrift

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)
Exempelutskrift

[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)
Exempelutskrift

[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))
Exempelutskrift

5

Loading

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)
Exempelutskrift

[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å:

Exempelutskrift

Siffror: [5, 10, 3] Skonummer: [37, 44, 40, 28]

Loading

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":

Alkion lisäys listaan

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:

Exempelutskrift

[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)
Exempelutskrift

[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)
Exempelutskrift

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:

Exempelutskrift

[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)
Exempelutskrift

[2, 1, 2] [2, 2]

Loading

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")
Exempelutskrift

Listan innehåller värdet 1

Loading

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)
Exempelutskrift

[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))
Exempelutskrift

[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)
Exempelutskrift

[2, 5, 1, 2, 4] [1, 2, 2, 4, 5]

Loading

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)
Exempelutskrift

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)
Exempelutskrift

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))
Exempelutskrift

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:

Exempelutskrift

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()
Loading
Loading
Loading

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.

Loading...
:
Loading...

Log in to view the quiz

Du har nått slutet av den här delen! Fortsätt till nästa del:

Se dina poäng genom att klicka på cirkeln nere till höger av sidan.