Listor
Tupler & Strängar
Range
Sammanslagna tilldelningsoperatorer
For-loopar
Listor:
En lista med heltal:
minaTal = [1, 2, 4, 8, 16]
En lista med strängar:
disney = [’kalle’, ’aladdin’, ’askungen’, ’bambi’]
Varje tal/sträng i listan kallas ”element”.
Alla element i listan har ett index. Första elementet har index 0, så för att referera till det
skriver man
minaTal[0]
disney[0]
för ovanstående två listor.
print disney[0] skulle ge utskriften kalle
På samma sätt kan man referera till övriga element, med ett index:
minaTal[4] ger värdet 16.
Tänk på att eftersom indexeringen börjar på 0 så är det högsta indexet ett mindre än listans
längd. D.v.s. om listan innehåller 5 element så är högsta index 4. Försöker man använda ett
index som är högre, får man ett IndexError.
Det går även att ta ut delar av en lista:
print disney[1:3]
Här kommer elementen på index 1 fram till 3 (inte 3) med, så utskriften blir:
['aladdin', 'askungen']
Listor är föränderliga, så om man vill ändra ett element kan man t.ex. skriva
minaTal[3] = 7
Detta skulle ge följande lista: [1, 2, 4, 7, 16]
Listor är objekt. Det innebär att variabelnamnen (disney, minaTal etc) enbart är referenser till
listorna. Skriver vi
nyLista = disney
så kommer variabeln nyLista vara en referens till SAMMA lista i minnet. Så om vi ändrar i
listan disney, t.ex.
disney[2] = ’snövit’
och därefter skriver ut nyLista (med print nyLista) så kommer även denna lista att ha
”snövit” istället för ”askungen” på tredje elementet (index 2) Vill man ha en kopia som INTE
ändras när man ändrar den första listan kan man t.ex. skriva
nyLista = []+disney
Nu refererar de inte längre till samma lista eftersom nyLista består av en tom lista
sammanfogad med innehållet i listan disney.
Listor i listor:
Man kan lägga listor i listor, så ett element i en lista kan bestå av en ny lista:
enLista = [minaTal, disney]
Nu kommer variabeln enLista se ut som följande:
enLista = [[1, 2, 4, 7, 16], [’kalle’, ’aladdin’, ’snövit’,
’bambi’]]
Man kan även blanda typer i en lista:
blandadLista = [’hej’, 42, [’ett’, ’två’, ’tre’]]
Tupler & Strängar
Vid sidan av listor finns tupler. De fungerar som listor men skillnaden är att de inte går att
förändra.
För att skapa en tupel använder man vanliga paranteser istället för hakparanteser:
minTupel = (2, 5, 9)
För att plocka ut enskilda element använder man hakparanteser som vanligt:
print minTupel[0:2]
ger utskriften (2, 5)
Det går INTE att skriva som följande:
minTupel[1] = 6
Tupler är som sagt oföränderliga. De har inte förändringsoperationerna som listor har.
Strängar är en typ av tupler.
namn = ’Henrik’
print namn[3:5]
ger utskriften ”ri”.
Så om strängar är tupler borde de vara oföränderliga och då borde funktioner som lower() inte
finnas? Nja, dessa funktioner förändrar inte själva strängen utan returnerar en helt ny sträng
som är en modifierad version av den förra.
a = ”Pelle”
a.lower()
print a
ger fortfarande utskriften ”Pelle”. Innehållet i variabeln a är oförändrad! För att ändra
innehållet i a måste man skriva
a = ”Pelle”
a = a.lower()
print a
Nu kommer det gamla innehållet i variabeln a att ersättas med den nya modifierade strängen
och utskriften kommer att bli ”pelle”
Range
För att skapa listor med tal kan man använda funktionen range().
talLista = range(8)
print talLista
Första raden kommer att skapa en lista (med variabelnamn talLista) som innehåller talen 0-7
Andra raden gör utskriften [0, 1, 2, 3, 4, 5, 6, 7]
Range kan även få två parametrar:
talLista = range (3,9)
print talLista
ger utskriften [3, 4, 5, 6, 7, 8]
Den tar alltså med första siffran.
Med ytterligare en parametrar i range kan man ange en steglängd:
talLista = range(2,9,2)
print talLista
ger utskriften [2, 4, 6, 8]. Den sista 2:an säger att talen ska stegas uppåt med två. Genom att
ange ett negativt tal kan man stega neråt. Exempel:
talLista = range(11,8,-1)
print talLista
ger [11, 10, 9]
Sammanslagna tilldelningsoperatorer
”=” är en tilldelsningsoperator. De ”sammanslagna tilldelningsoperatorerna är +=, -=, /=, *=,
%=
x = x+5 kan skrivas som x+=5. På samma sätt fungerar de övriga operatorerna
Just + kan användas för strängar också.
mening = ”Mitt namn är ”
mening += namn
print mening
ger utskriften: Mitt namn är Kalle
For-loopar
Används för att gå igenom alla element i en lista, tupel eller sträng.
Skillnaden mellan for-loop och while loop är att shile styrs av ett villkor och for av antal
element.
Enkel slinga:
for x in range(4):
print x,
range(4) skapar en lista som ser ut som följande: [0, 1, 2, 3]
första raden startar en slinga där första elementet från listan sparas i variabeln x.
I andra raden skrivs värdet i x, d.v.s. 0 ut.
Sedan går den tillbaka till början, tar andra värdet från listan och sätter in i x. I andra raden
skriver den ut detta värde (som nu är 1). Resultatet efter 4 iterationer (=varv) blir utskriften ”0
1 2 3”
På samma sätt kan vi använda en lista som vi själv skapat, t.ex. disney:
for figur in disney:
print figur, ’-’,
ger utskriften: kalle - aladdin - snövit - bambi -
Man kan göra likadant med en sträng:
braDag = ’En toppendag’
for bokstav in braDag:
print bokstav,
Ger utskriften: E n t o p p e n d a g
Följande rader kan användas för att beräkna summan av tal i en lista:
talLista = [19, 52, 7,
summa=0
for x in talLista:
summa += x
print summa
4, 43, 23, 71]
Vad händer här? Viktigt att förstå detta konceptuellt men det finns en funktion som heter sum
som gör precis samma sak.
Nästlade slingor:
Vi använder oss av följande lista i alla exempel:
persondata = [['Anna','21','Stockholm'],\
['Erik','23','Halmstad'],\
['Mia','14','Ystad']]
Om jag vill ha alla personernas namn:
for x in persondata:
print x[0],
Namnet är ju första elementet i listan ”x”
Jämför detta med
for x in persondata[0]:
print x,
Detta kommer att skriva ut ”Anna 21 Stockholm” eftersom persondata[0] anger att for-loopen
ska iterera över endast första elementet i listan persondata. Detta element råkar nu vara en ny
lista varför detta är möjligt.
Högakuella när man t.ex. har listor i listor.
for personen in persondata:
print ''
for data in personen:
print data,
Ger utskriften:
Anna 21 Stockholm
Erik 23 Halmstad
Mia 14 Ystad