Logga in för att kunna spara vad du har gjort.
<< Föregående
Hem
Nästa >>
VARNING! Fönstret är för smalt för att använda pythonlabbet.se fullt ut. Använd en enhet med tangentbord!

Mer om listor

I det här avsnittet kommer du att lära dig att

Dellistor eller del av en sträng

I Python är det enkelt att skapa en dellista av en lista eller en delsträng av en sträng. På engelska heter det slicing. Syntaxen som används är variabel[start:slut] där start är det index som delen börjar på och slut är där delen slutar. Indexet slut är inte inkluderat.

Exempel

Några exempel på hur syntaxen kan användas för att skapa en delsträng.

idag = '2021-11-29'
år = idag[0:4] #index 0 till och med 3
månad = idag[5:7] #index 5 och 6
dag = idag[8:10] #index 8 och 9

Exempel

Dellistor skapas på samma sätt som delsträngar. Tänk på att första elementet i listan har index 0.

# listan anger tider i os-finalen i Tokyo på 100 meter herrar.
tider = ['9.80', '9.84', '9.89', '9.93', '9.95', '9.95', 'DNF', 'DQ']

tid_1_3 = tider[0:3] # tre bäst tiderna i en dellista
tid_4_6 = tider[3:6] # tiderna på plats 4 till 6

Logga in eller skapa konto för att spara dina framsteg och din kod.

Vad gör koden?

Läs koden nedan och försök lista ut vad programmet skriver ut. Kör programmet efter du svarat och se om du fick rätt.

-- Programmets utskrifter --

Fråga: Vad kommer programmet ovan att skriva ut?

nty
nty P
ty P
ty Py

Fler sätt att dela på

I syntaxen variabel[start:slut] går att det utelämna start eller slut. Ja, det går faktiskt att utelämna båda två för att få med allt. Om start utelämnas så tas allt med från början upp till slut. Om slut utelämnas tas allt med från start till slutet.

Exempel

Exempel på slicing där startindex och slutindex utelämnas.

s = 'Monty Python'

# Ta med tecken från början upp till index 5
början = s[:5]

# Ta med tecken från index 6 till slutet
slutet = s[6:]
  

Kommer du ihåg att negativa index kan använda i listor och strängar? Negativa index innebär att vi räknar positionen bakifrån, -1 betyder det sista elementet. Det går bra att använda negativa index när vi skapar delsträngar och dellistor också.

Exempel

Skapa en dellista med negativa index.

s = 'Monty Python'
delsträng = s[1:-1] #ta inte med första och sista tecknet
  

Logga in eller skapa konto för att spara dina framsteg och din kod.

Vad gör koden?

Läs koden nedan och försök lista ut vad programmet skriver ut. Kör programmet efter du svarat och se om du fick rätt.

-- Programmets utskrifter --

Fråga: Vad kommer programmet ovan att skriva ut?

Monty Pyth Mo
Monty Pyth M
Monty Pytho Mo
Monty Pytho M

Listbyggare

Listbyggare används för att skapa listor genom att bara skriva en rad kod. Det engelska namnet för listbyggare är list comprehension och är troligtvis det du kommer stöta på mest. Listbyggare kombinerar syntaxen för att skapa en lista [] med syntaxen för en for-sats. Senare ska vi se att det går att använda en if-sats också, men vi börjar med enklare exempel.

Exempel

Skapar en lista med fem identiska element.

lista = [0 for i in range(5)]

I exemplet ovan användes aldrig räknaren i. Vi ser vad som händer om vi använder i istället för noll.

Exempel

Fler exempel på listbyggare.

lista_1 = [i for i in range(5)] # [0,1,2,3,4]

lista_2 = [i*5 for i in range(5)] # [0,5,10,15,20]
  

Nu ska vi se hur vi kan använda en if-sats inuti en listbyggare. Det kan till exempel användas för att filtrera ut element i en lista.

Exempel

Listbyggare med if-sats.

namn = ['Maria', 'Anna', 'Margareta', 'Elisabeth', 'Eva', 'Kristina']

#skapa en ny lista med namn som slutar på a
slutar_på_a = [n for n in namn if n[-1] == 'a']

#lista med namn som är max fem tecken långa
korta_namn = [n for n in namn if len(n) <= 5]

Listbyggare kan vara lite luriga att förstå sig på, speciellt om du kan något annat programmeringsspråk där det inte finns. Om du har en listbyggare [x for x in lista if x < 10] så kan du tänka på det så här: Lägg in elementet x i listan för alla element x i lista där x är mindre än 10. Vi skapar alltså en ny lista från lista med alla element som är mindre än 10.

Listbyggare är inte nödvändigt att kunna eftersom det alltid går att göra samma sak med en vanlig for-sats eller while-sats. Men för vana Pythonprogrammare som ofta arbetar med listor är det en trevlig funktion.

Logga in eller skapa konto för att spara dina framsteg och din kod.

Ändra i koden

Ändra i koden så att listbyggaren filtrerar bort alla negativa tal.

-- Programmets utskrifter --

En lista av listor

Tänk dig en vanlig lista och tänk sedan att varje element i den listan är en ny lista. Det är en lista av listor eller 2D-lista.

En 2D-lista passar speciellt bra för modeller av något i två dimensioner. En vanlig bild är ett bra exempel. För att iterera igenom alla elementen i en 2D-lista brukar en nästlad for-sats användas.

Exempel

Skapa en 2D-lista med två rader och tre kolumner. De två elementen i listan representerar rader. De elementen är i sin tur också listor.

lista_2d = [ [1, 2, 3], [4, 5, 6] ]

Exempel

Variabeln bild är en 2D-lista som representerar en enkel bild. Varje pixel är antingen # eller ett blanksteg. Bilden har sju pixlar på bredden och sex pixlar på höjden. 2D-listan har alltså sex rader och varje rad innehåller sju kolumner. Vi skriver ut bilden med en nästlad for-sats.

En riktig bild fungerar på samma sätt. Elementen brukar dock vara ett tal som beskriver färgen på den pixeln.

bild = [
    [' ', '#', '#', ' ', '#', '#', ' '],
    ['#', ' ', ' ', '#', ' ', ' ', '#'],
    ['#', ' ', ' ', ' ', ' ', ' ', '#'],
    [' ', '#', ' ', ' ', ' ', '#', ' '],
    [' ', ' ', '#', ' ', '#', ' ', ' '],
    [' ', ' ', ' ', '#', ' ', ' ', ' ']]

for rad in bild: #
    for kolumn in rad:
        print(kolumn, end='')
    print() #ny rad i utskriften för varje utskriven rad i bilden  
  

Logga in eller skapa konto för att spara dina framsteg och din kod.

Skapa

Nu ska du beräkna värdet av alla # i bilden som finns i variabeln bild. I den här uppgiften är värdet på en # beroende på vilken rad den är på. Alla # på första raden är värda ett, # på andra raden är värda två och så vidare. För varje rad ökar värdet med ett.

Summera alla värden. Skriv ut totala värdet för bilden.

-- Programmets utskrifter --
Status
Du har inte gjort klart någon uppgift än (0 st).