Listor
En lista består av en följd (0 eller flera) av element. Elementen är av godtycklig datatyp t.ex. heltal, flyttal, strängar, listor, etc. Listor används (bl.a.) för det som i många språk kallas för arrayer. Till skillnad från språk som Java och C++ kan elementen i en och samma lista vara av olika typ.
Listobjekt är, till skillnad från strängar och tupler, ändringsbara (eng. mutable). Det betyder element i en lista kan tas bort, läggas till och bytas ut.
Listkonstruktor
Listor kan skapas genom att man räknar upp komponenterna inom []
-parenteser.
Exempel:
Listor kan skapas från andra objekt med list
-funktionen:
Operatorer för listor
Observera att dessa är i stort sett samma som för strängar och tupler.-
Listor kan konkateneras med
+
-operatorn. -
Listor kan mångfaldigas med
*
-operatorn. - Enskilda element kan nås med indexering.
-
Enskilda element eller sekvenser av element kan bytas ut med tilldelningsoperatorn
=
. -
Dellistor kan skapas med skivningsoperatorerna (eng. slicing operators)
[start:stop]
- och[start:stop:increment]
-uttrycken. -
Medlemsskap kan testas med operatorerna
in
ochnot in
.
Fler skivningsoperationer
Kod | Värde | Kommentar |
---|---|---|
l = [0, 1, 2, 3, 4, 5, 6] | ||
l[-2] | 5 | Näst sista elementet. |
l[-2:] | [5, 6] | Näst sista elementet och till slutet. |
l[-2:100] | [5, 6] | OK att ange en för stor övre gräns. |
l[-7] | 0 | Första elementet i en lista med 7 element. |
l[-1 : 3] | [] | Observera att -1 refererar sista elementet och inte den tänkta platsen före första elementet. |
l[-8 : 3] | [0, 1, 2] | -8 refererar den tänkta platsen före första elementet i en lista med 7 element. |
l[-len(l)] | 0 | Första elementet i en godtycklig lista. |
l[-len(l)-1 : -len(l)+2] | [0, 1] | I princip en lista med tre element men första index är utanför så det blir bara två. |
l[-len(l)-1 : -len(l)+2] | [0, 1, 2] | I princip en lista med fem element men första två index är utanför så det blir bara tre. |
Funktioner för listor
Funktion | Betydelse | Exempel |
---|---|---|
len | Antal element (på toppnivå) i listan. | len([1, 2, [a, b, c]]) -> 3 |
list | Skapar nytt listobjekt från lista, sträng eller tupel. | list('ab') -> ['a', 'b'] |
max | Största elementet. | max([1, 2, 3]) -> 3 |
min | Minsta elementet. | min(['x', 'a', 'b']) -> 'a' |
str | Returnerar listan som en sträng. | str([1, 2]) -> '[1, 2]' |
sum | Summan av elementen. Elementen måste vara numeriska. | sum([1, 2, 3]) -> 6 |
sorted | Returnerar en sorterad lista. Elementen måste ha storleksrelationer. |
sorted([2, 3, 1]) -> [1, 2, 3] sorted(['y', 'x']) -> ['x', 'y'] |
Listmetoder
Listklassen har ett stort antal metoder. Se den officiella dokumentationen för en fullständig förteckning och detaljer.Metod | Betydelse | Exempel |
---|---|---|
append | Lägger till ett element sist. | al = [1, 2] al.append(3) print(al) -> [1, 2, 3] |
clear | Tar bort alla element ut listan. | |
copy | Skapar en kopia av listan dvs ett nytt objekt med samma innehåll. | |
count | Räknar antalet förekomster visst element. | [1, [1, 2], 1].count(1) -> 2 [1, [1, 2], 1].count([1, 2]) -> 1 |
extend | Lägger till alla element från en annan lista. |
al = [3, 5] al.extend([1, 5]) al -> [3, 5, 1, 5] |
index | Returnerar index för första förekomst av ett element. |
al.index(5) -> 1 al.index(1) -> 2 |
insert | Stoppar in ett nytt element på angivet index. |
al.insert(2,'b') al -> [3, 5, 'b', 1, 5] |
pop | Tar bort och returnerar sista elementet. |
x = al.pop() x -> 5 al -> [3, 5, 'b', 1] |
remove | Tar bort första förekomst av angivet element. |
al.remove('b') al -> [3, 5, 1] |
reverse | Vänder på listan |
al.reverse() al -> [1, 5, 3] |
sort | Sorterar listan |
al.sort() al -> [1, 3, 5] |
copy
, count
och index
modifierar listan.
Att skriva ut listor
Uttrycketprint(lista)
skriver hela listan på en rad
medan koden
Hur ska man göra om man vill skriva t.ex. fem element per rad?
Funktionen print
har en nyckelordsparameter end
som
avgör vad som ska skrivas som sista värde.
Dess defaultvärde är '\n'
vilket således ger ett radbyte.
Om man anger end=''
som parameter undviker man alltså radframmatning.
Om man håller reda på hur många värden som skrivits ut kan man se till att radbrytningen
bara sker t.ex. efter vart femte element.
print
-satsen ser till att
varje värde tar lika stor plats t.ex. genom att skriva
print(f'{x:5d},' end=' ')
.
Se minilektionen om formatering!)
I ovanstående lösning räknar vi själva index i listan.
Python har dock en funktion enumerate
som kan göra det automatiskt:
start
-parametern till enumerate
anger att den ska börja räkna från 1 i stället för 0 (annars blir radindelningen fel).
Listbyggare
Python har en konstruktion som på engelska heter list comprehensions som vi översätter till listbyggare.Detta är ett enkelt och elegant sätt att konstruera listor. Vi demonstrera det med några exempel:
Kod | Värde | Kommentar |
---|---|---|
l = [x for x in range(8)] | Skapar en lista från ett range-objekt | |
l | [0, 1, 2, 3, 4, 5, 6, 7] | |
[x*x for x in l] | [0, 1, 4, 9, 16, 25, 36, 49] | Kvadrater på talen i listan |
[x for x in l if x%2 == 1] | [1, 3, 5, 7] | Alla udda tal i listan |
[x*x for x in l if x*x%2 == 0] | [0, 4, 16, 36] | Alla jämna kvadrater |