Listiga listor

Variabler har vi ju pillat med en hel del vid det här laget, men ibland räcker variabler inte riktigt till. Man har ibland mycket data som hör ihop och som man vill ha tillgängligt lite smidigt.

Antag till exempel att man har ett gäng tal, som man vill beräkna medelvärdet på. Vi kan ju knö in dem som tal1, tal2, tal3, tal4 och så vidare, men då får vi ingen riktig nytta av loopar och vi
måste veta från början hur många tal vi ska jobba med.

dscf5014_raf_shotwell_modified

Som sagt var, vanliga variabler är helt enkelt inte kraftfulla nog. Om en variabel är ett namngivet minnesutrymme, så är en lista en hel rad med minnesutrymmen, med ett gemensamt namn. Vill man komma åt ett visst element i listan pekar man ut det med hjälp av en siffra, ett ”index”.

Börja leka med listor

 >>> min_lista = [3, 3.5, 2.9, 4, 2.4]
 >>> i = 0
 >>> while i < len(min_lista):
 ...     print min_lista[i]
 ...     i = i + 1
 ...
 3 3.5 2.9 4 2.4

Vi skapar en lista och fyller den med ett gäng med tal. Sedan gör vi en vanlig hederlig while-loop och printar ut elementen i listan ett och ett. Varje element når vi med hjälp av ett index, siffran
mellan hakparenteserna. Funktionen len() ger dig listans längd.

 >>> print len(min_lista)
 5

Lite råddigt innan man lär sig det är att listans första element har index 0. Därför kanske man bör undvika att kalla det det första, utan säg i stället det ”nollte”.

 >>> print min_lista[0]
 3

Om det finns fem element i listan och man börjar räkna på noll så
blir så klart det sista nummer 4.

 >>> print min_lista[4]
 2.4

Vi testar att använda det här till någonting, nämlien att räkna ut
ett medelvärde på talen i listan…

 >>> min_lista = [3, 3.5, 2.9, 4, 2.4]
 >>> summa = 0
 >>> i = 0
 >>> while i < len(min_lista):
 ...     summa = summa + min_lista[i]
 ...     i = i + 1 ...
 >>> medelvarde = summa / len(min_lista)
 >>> print medelvarde
 3.16
 >>>

Inte bara siffror

Man kan stoppa i lite vad man vill i en lista:

 >>> lista = [Fantomen', 'Kalle Anka', 'Bamse', 'Agent X9']
 >>> print lista
 ['Fantomen', 'Kalle Anka', 'Bamse', 'Agent X9']

Man kan faktiskt blanda hejdlöst i en lista, men oftast är det vettigast att ha saker av ungefär samma slag i en lista.

Lägga till efter hand

Man kan bygga ut listan när man vill:

 >>> lista.append('Spindelmannen')
 >>> print lista
 ['Fantomen', 'Kalle Anka', 'Bamse', 'Agent X9', 'Spindelmannen']

Sorterad lista

Eller sortera sin lista:

 >>> lista.sort()
 >>> print lista
 ['Agent X9', 'Bamse', 'Fantomen', 'Kalle Anka', 'Spindelmannen']
 >>>

Listor av listor

Ja, man kan till och med skapa en lista av listor

 >>> superlistan =[min_lista, lista]
 >>> print superlistan
 [ [3, 3.5, 2.8999999999999999, 4, 2.3999999999999999, 3], ['Agent X9', 'Bamse', 'Fantomen', 'Kalle Anka', 'Spindelmannen']]

En tom lista

En tom lista låter korkat, men det är ofta riktigt bra eftersom man sedan kan fylla på den med
append när man kör programmet:

 >>> tom_lista = []
 >>> print tom_lista
 []
 >>>

Skär korven i skivor

Du kan plocka ut delar av listor, se exemplen nedan:

 >>> lista
 ['Agent X9', 'Bamse', 'Fantomen', 'Kalle Anka', 'Spindelmannen']
 >>> lista[2:]
 ['Fantomen', 'Kalle Anka', 'Spindelmannen']
 >>> lista[:2]
 ['Agent X9', 'Bamse']
 >>> lista[1:2]
 ['Bamse']
 >>> lista[1:3]
 ['Bamse', 'Fantomen']
 >>>

Okej, det här var kanske lite mycket på en gång, men med lite övning bör det nog kunna fastna bland de där grå cellerna.

  • Gör några egna listor och testa vad du kan göra med dem. Skriv ut elementen i en whileloop, sortera, skriv ut det tredje elementet, skriv ut i bokstavsordning eller nummerordning.
  • Gör en lista med några tal i och skriv ut det största och det minsta talet. Ledtråd: sortera listorna
  • Gör en lista med ett udda antal tal, sortera listan och skriv ut det tal som hamnat i mitten, det talet brukar kallas för medianen.
  • Gör ett program (ett riktigt som du gör i en editor), som räknar ut medlevärdet av ett antal tal som användaren matar in. Fråga först efter antalet tal, läs sedan in talen ett och ett i en lista. (whileloop). Summera sedan talen i en ny while-loop och räkna sedan ut medlevärdet.
  • Bygg ut programmet ovan så att det också skriver ut det största talet, det minsta talet och medianen. (Du får själv ta reda på hur man beräknar medianen om antalet tal är jämt)
Annonser