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