CoCalc -- Collaborative Calculation in the Cloud
SharedSage genom exempel / Listor.sagewsOpen in CoCalc

Listor

En lista är en uppsättning element inom hakparentes, där ordningen har betydelse och där dubbletter är tillåtna. Elementen i en lista indexeras från 00, 11, och så vidare.
lista = [1, 2, 4, 2, 8]
Den tomma listan innehåller förstås inga element.
tom = []
Ett enskilt element i en lista kommer man åt genom att använda dess index.
lista[1]   # andra elementet i 'lista'
2
Studera mängden A={5k1:k=1,2,,15}. A = \{5k-1 : k = 1, 2, \ldots, 15\}. En lista med heltalen 1,2,,151, 2, \ldots, 15 konstrueras med [1..15]. Mängden AA som en lista fås med följande kod.
A = [5*k-1 for k in [1..15]]
A
[4, 9, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64, 69, 74]
Det går att plocka ut en del av en lista.
A[3:6]   # det fjärde till och med det sjätte elementet
[19, 24, 29]
A[:4]  # de fyra första elementen i listan
[4, 9, 14, 19]
A[6:]  # alla element från och med detsjunde elementet
[34, 39, 44, 49, 54, 59, 64, 69, 74]
A[2:10:3]  # plocka ut elementen med index 2, 5 och 8
[14, 29, 44]
A[10:2:-3]  # plocka ut elementen med index 10, 7 och 4
[54, 39, 24]
A[:]  # samtliga element
[4, 9, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64, 69, 74]
Notera att ovanstående har inte förändrat A.
A
[4, 9, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64, 69, 74]
Med negativ index utgår man från slutet av en lista.
lista[-1] = A[5]; lista
[1, 2, 4, 2, 29]
Listvariabler är egentligen etiketter som hänvisar till det minnesutrymme där listan är lagrad. I nedanstående kod defineirar vi tre listvariabler, fast på tre olika sätt.
lista_1 = [1, 2, 3]
lista_2 = lista_1
lista_3 = copy(lista_1)
print 'Lista 1:', lista_1
print 'Lista 2:', lista_2
print 'Lista 3:', lista_3
Lista 1: [1, 2, 3] Lista 2: [1, 2, 3] Lista 3: [1, 2, 3]
Om vi nu ändrar lista_2, så ändrar vi samtidigt lista_1, då de hänvisar till samma lista i minnet.
lista_2[1] = 4   # ändra i lista_2
print 'Lista 1:', lista_1
print 'Lista 2:', lista_2
print 'Lista 3:', lista_3
Lista 1: [1, 4, 3] Lista 2: [1, 4, 3] Lista 3: [1, 2, 3]
Notera att lista_3 inte ändras, eftersom denna är en kopia av första listan.
Man kan konstruera listor på många olika sätt.
[-3..6]
[-3, -2, -1, 0, 1, 2, 3, 4, 5, 6]
[1,4..19]  # var tredje heltal mellan 1 och 19
[1, 4, 7, 10, 13, 16, 19]
typeset_mode(True)
[pi/4, pi/2..7]
typeset_mode(False)
[14π\displaystyle \frac{1}{4} \, \pi, 12π\displaystyle \frac{1}{2} \, \pi, 34π\displaystyle \frac{3}{4} \, \pi, π\displaystyle \pi, 54π\displaystyle \frac{5}{4} \, \pi, 32π\displaystyle \frac{3}{2} \, \pi, 74π\displaystyle \frac{7}{4} \, \pi, 2π\displaystyle 2 \, \pi]
range(16)  # de 16 första icke-negativa heltalen
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
range(1, 16)  # start och slut (där övre gränsen inte tas med)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
range(1, 16, 3)  # ett steg på 3
[1, 4, 7, 10, 13]
range(16, 0, -1)  # med negativt steg räknar vi nedåt
[16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Antal element i en lista bestämmer man med funktionen len.
len(A)
15
Vilket index har elementet 2929 i listan A?
A.index(29)
5
Med funktionen count kan vi räkna hur många gånger ett visst element förekommer i en lista.
L = [1, 2, 4, 5, 1, 2, 1, 0, 2]
L.count(2)  # antal 2:or i L
3
Funktionen sort sorterar en lista.
L.sort()
Funktionen returnerar inte resultatet -- den förändrar aktuell listvariabel och gör därför en tilldelning.
L  # listan är nu sorterad
[0, 1, 1, 1, 2, 2, 2, 4, 5]
För att lägga till element i slutet av en lista använder man append.
L.append(77)  # förändrar L och ger därför ingen utskrift
L
[0, 1, 1, 1, 2, 2, 2, 4, 5, 77]
Vill man konkatenera två listor gör man det med plus (+).
L1 = [1, 2, 3]
L2 = [5, 6]
L1 + L2
[1, 2, 3, 5, 6]
Multiplicerar man en lista med ett positivt heltal nn så konkatenerar Sage nn kopior av listan.
7 * L2
[5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6]
Vi kan summera elementen i en lista.
sum(A)
585
Även produkten av samtliga element i listan går att enkelt bestämma.
prod(A)
19837740893195045044224
En lista kan även innehålla andra typer av element än tal, t.ex. textsträngar.
mat_prog = ['Sage', 'Matlab', 'Pari/GP']
mat_prog[1] = 'Mathematica'
mat_prog
['Sage', 'Mathematica', 'Pari/GP']
En lista kan också innehålla listor.
L = [[1, 2], [3, 4], [5, 6]]
table(L)  # skriv ut listan som en tabell
1 2 3 4 5 6
L[1]  # andra elementet i listan är också en lista
[3, 4]
För att plocka ut den nn:te elementet i den mm:te delistan ur en lista LL skriver man L[m-1][n-1].
L[1][0]  # första (0) elementet i andra (1) dellistan
3
Låt oss skapa en multiplikationstabell.
mult_tab = [[a * b for b in [1..9]] for a in [1..9]]
table(mult_tab)
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
Förklaring: För varje a=1,2,,9a = 1, 2, \ldots, 9 skapar vi en dellista på formen [a * b for b in [1..9]], d.v.s. en lista med produkten abab där b=1,2,,9b = 1, 2, \ldots, 9. Varje sådan lista motsvarar en rad i tabellen. Låt oss förbättra utskriften av tabellen genom att lägga till rubriker för rader och kolumner.
table(mult_tab, header_row = [1..9], header_column=['*']+[1..9])
* | 1 2 3 4 5 6 7 8 9 +---+---+----+----+----+----+----+----+----+----+ 1 | 1 2 3 4 5 6 7 8 9 2 | 2 4 6 8 10 12 14 16 18 3 | 3 6 9 12 15 18 21 24 27 4 | 4 8 12 16 20 24 28 32 36 5 | 5 10 15 20 25 30 35 40 45 6 | 6 12 18 24 30 36 42 48 54 7 | 7 14 21 28 35 42 49 56 63 8 | 8 16 24 32 40 48 56 64 72 9 | 9 18 27 36 45 54 63 72 81