Start | tupler
 

Tupler



ordnad lista

En tupel är en ordnad lista vars tanke är att den ska användas för data som är statiska, dvs normalt inte ska ändras. En tupel är också snabb, ifall prestanda är viktigt.

0123
1012678

Ordnad syftar på att den består av bestämda fack som ligger i ordning och du kan komma åt denna värden med hjälp av dess index-nummer. Första positionen har index 0.
koordinat = (10, 12, 67, 8) print(koordinat) print(koordinat[0]) print(koordinat[1])

mönster-matcha tilldelning

Det går att mönster-matcha vid tilldelning av variabler. Så nedan kommer alltså ge x värde 10 och y värde 12.
(x, y) = (10, 12) print(x) print(y)
Om du tilldelar en tupel till en variabel, så kan du senare mönster-matcha ut dess värden.
koordinat = (10, 12) (x, y) = koordinat print(x) print(y)
Nu går det faktiskt att tilldela en talserie till en variabel. Så vi kan senare tupple-ifiera talserien. Studera nedan.
koordinat = 10, 12 (x, y) = koordinat print(x) print(y)
En tupel kan bestå av lite allt möjligt, boolska värden, siffror, strängar, andra tupels ...
flaggor = (True, False, False, True) (a,b,c,d) = flaggor print(a) print(b) print(c) print(d)

Säg att du har en lång tupel med många värden och det är enbart de två första värdena du är intresserad av. Du kan mönster-matcha ut dessa 2 och placera resten i någon annan varabel. Observera, att *resten blir en lista (du ser det på hakparenteserna, hak = lista), dvs inte är en tupel.
flaggor = (True, False, False, True) (a, b, *resten) = flaggor print(a) print(b) print(resten)
Om du behöver de två sista värda istället så kan du mönster-matcha ut de 2 sista och lägga alla andra värden i en annan variabel.
flaggor = (True, False, False, True) (*start, a, b) = flaggor print(a) print(b) print(start) # ger lista (som är ändringsbar)

indexera bakifrån

Precis som med strängar och listor kan även tupels adresseras bakifrån med negativt index. Ett negativt index räknas då baklänges från sista elementet där -1 är sista elementet (34 i nedan exempel).
data = (4, 5, 2, 78, 90, 34) print(data[0]) print(data[-1]) print(data[-2])

klipp ut segment

Precis som med strängar och listor kan man även klippa ut segment ur en tupel enligt konceptet [start:stop]

Det viktiga att komma ihåg här, det är att stop -siffran inte inkluderas. Dvs om vi kallar x för index, så gäller

[a,b[ = {start ≤ x < stop}


I nedan exempel så betyder 1:3 att vi startar med "Apelsin", "Banan" och sedan är det slut. Päron hade varit index 3, men det inkluderas som sagt inte.
frukt = ("Äpple", "Apelsin", "Banan", "Päron") # start vid 1 men inkluderar ej slutvärde 3 print(frukt[1:3]) # alla värden upp till men ej inkl slutvärde 3 print(frukt[:3]) # alla värden från position 1 och upp print(frukt[1:])
Så, startvärdet är där vi startar. Sedan fortsätter det till stop, men själva stop -index räknas inte med. Om start utelämnas så är det samma sak som det hade stått 0. Om Slutvärdet utelämnas så tas alla värden fram till slutet.

Även här kan man indexera bakifrån från slutet med negativa värden.
frukt = ("Äpple", "Apelsin", "Banan", "Päron") # alla värden från position -3 med ej inkl -1 print(frukt[-3:-1])
I tupels går det att testa om ett värde finns med, precis som med listor.

finns tupel?

frukt = ("Äpple", "Apelsin", "Banan", "Päron") if "Banan" in frukt: print("Japp, banan finns!")

ändra i tupler

hack


Men du kan ej ändra en tuple, det är en av egenskaperna och skillnad mot lista. Så en tuple passar bra för värden, koordinater m.m. som inte skall ändras. Men det går såklart "hacka" konceptet lite genom att konvertera tupeln till en lista, ändra i listan och sedan konvertera tillbaka. Job done. Case closed.
frukt = ("Äpple", "Apelsin", "Banan", "Päron") temp = list(frukt) temp[1] = "Tomat" frukt = tuple(temp) print(frukt)

slå ihop tupler

Samma metod kan användas om du vill lägga till en frukt.
frukt = ("Äpple", "Apelsin", "Banan", "Päron") temp = list(frukt) temp.append("Tomat") frukt = tuple(temp) print(frukt)
Du är också tillåten lägga ihop två eller fler tupler om du markerar tuplerna som påbyggbara med avslutande , -tecken. Här skiljer sig tupler från listor. Listor kan byggas ihop utan denna detalj medans tupler behöver förberedas på detta sätt, för att vara ihopbyggbara klossar. Poängen med tupler är ju att de inte ska ändras och moduleras, så det verkar vettigt ifall ändringar "modereras" på detta sätt.
frukt = ("Äpple", "Apelsin", "Banan", "Päron") extra = ("Tomat",) fler = ("Gurka", "Paprika",) frukt += extra + fler print(frukt)

ta bort element

Men vill du ta bort element, då måste du "hacka" konceptet åter igen. Det är inte meningen att du ska ta bort element i tupler. Om du måste ta bort element i tupler kanske du borde valt listor istället.
frukt = ("Äpple", "Apelsin", "Banan", "Päron") temp = list(frukt) temp.remove("Äpple") frukt = tuple(temp) print(frukt)

många tupel

Behöver du väldigt många av en viss frukt så kan du använda samma metod som med strängar och listor. Multiplikatorn tar samma tupel så många gånger du önskar.
frukt = ("Tomat") kottfars = frukt * 4 print(kottfars)

loop över tupel

För att iterera (loopa) över en tupel kan du tex använda for -loop. Det fungerar precis som med listor.
data = (4, 5, 2, 78, 90, 34) for i in range(len(data)): print(data[i])
Eller såhär
data = (4, 5, 2, 78, 90, 34) for d in data: print(d)

Packa upp med * stjärnoperator

Man kan tänka på stjärnoperatorn som att den packar upp tupeln, dvs plockar bort () kvar är bara en serie data (tal, strängar, annat). Den upp-packade tupeln kan du sedan paketera på nytt i något annat sammanhang.

Detta fungerar på samma sätt som med listor eller set's (mängder).
tup1 = (1,2,3,4,5,6) tup2 = (7,8,9,10,11) kombinerad = (*tup1,*tup2) print(kombinerad)

* stjärnoperator med print


Det kan också vara användbart packa upp tupeln vid utskrifter.
a = ("Lisa","Anna","Kalle","Richard","Moa","Olle") print(a)
Ovan utskrift är vad vi hade fått om vi bara printade ut tupeln. Studera resultatet nedan, när vi packa upp tupeln och skriver ut den.
a = ("Lisa","Anna","Kalle","Richard","Moa","Olle") print(*a)
Vi kan ändra sep som normalt är mellanrum, till nyrad.
a = ("Lisa","Anna","Kalle","Richard","Moa","Olle") print(*a, sep='\n')

Lite frågor


vikt = (10, 12, 67, 8)
Vad är vikt[1] ?
  67
  10
  12
flaggor = (True, False, True, True)
(b,a,d,c) = flaggor
Vad är a ?
  True
  False
data = (4, 5, 2, 78, 90, 34)
Vad är data[-2]
  34
  90
  78
frukt = ("Äpple", "Apelsin", "Banan", "Päron")
Vad är frukt[1:3]
  ('Äpple', 'Apelsin', 'Banan')
  ('Apelsin', 'Banan')
  ('Apelsin', 'Banan', 'Päron')
d = (1, 2, 3)
d[0] = 7
print(d)
Vad blir utskriften?
  (1, 2, 3)
  Det blir error, tupler tillåter inte ändring
  (7, 2, 3)


20.566940307617 ms