Slik bruker du tuples i Python

Lær tuples i Python. Uforanderlige sekvenser, unpacking, indeksering og forskjellen fra lister.

Videoforhåndsvisning

Opprett konto for å se video

Det er helt gratis og tar under 30 sekunder

Opprett gratis kontoHar du konto? Logg inn

Du har et koordinatpar (59.91, 10.75) som representerer breddegrad og lengdegrad for Oslo. Disse verdiene hører sammen, og ingen del av programmet skal kunne endre dem ved et uhell. Du kan bruke en liste, men lister lar deg endre verdier fritt, og det åpner for bugs. Tuples i Python er bygd for akkurat denne situasjonen: verdier som hører sammen og skal forbli uendret.

Slik oppretter du en tuple i Python

En tuple lager du med vanlige parenteser:

dager = ("mandag", "tirsdag", "onsdag", "torsdag")

Du kan også lage en tuple uten parenteser, bare med komma: dager = "mandag", "tirsdag", "onsdag". Men parenteser gjør koden tydeligere, og de fleste Python-utviklere bruker dem.

En vanlig fallgruve er å lage en tuple med bare ett element. en = ("hei") gir deg en streng, ikke en tuple. Du må ha med komma: en = ("hei",). Dette er en av de merkeligste delene av Python-syntaksen, men det er logisk: det er kommaet som definerer en tuple, ikke parentesene.

Tuples er uforanderlige

Forskjellen mellom tuples og lister koker ned til ett ord: immutabilitet. Når du har opprettet en tuple, kan du ikke endre innholdet. Prøver du dager[0] = "søndag", får du TypeError.

Du kan ikke legge til elementer, fjerne elementer eller endre rekkefølgen. Det som ligger i tuplen når den opprettes, er det som blir der. Denne begrensningen er ikke en svakhet. Det er en garanti. Når du sender en tuple til en funksjon, vet du at funksjonen ikke kan endre dataene dine. I større programmer er dette uvurderlig for å unngå uventede sideeffekter.

Indeksering og slicing

Selv om du ikke kan endre verdiene, kan du lese dem. Indeksering fungerer identisk med lister:

dager[0] gir "mandag"
dager[-1] gir "torsdag"
dager[0:2] gir ("mandag", "tirsdag")

Du kan også bruke len() for å sjekke antall elementer, in for å sjekke medlemskap, og for-løkker for å iterere gjennom alle verdiene. Alt som leser data fungerer likt. Det er bare skriveoperasjoner som er blokkert. For eksempel printer for dag in dager: print(dag) alle ukedagene, akkurat som med en liste.

Tuple-utpakking

En av de mest praktiske funksjonene med tuples er utpakking. Du kan tilordne hvert element i tuplen til en egen variabel i én operasjon:

koordinater = (59.91, 10.75)
breddegrad, lengdegrad = koordinater

Nå har du to separate variabler med verdiene fra tuplen. Antall variabler på venstre side må stemme med antall elementer i tuplen, ellers får du ValueError. Et nyttig triks: du kan bruke stjerne (*) for å fange resten av elementene. første, *resten = (1, 2, 3, 4) gir første = 1 og resten = [2, 3, 4].

Utpakking brukes overalt i Python. Når du skriver for nokkel, verdi in ordbok.items():, pakker du ut tuples. Hvert par som items() returnerer er en tuple med to elementer. Du har allerede brukt tuple-utpakking uten å tenke over det.

Nyttige metoder: count() og index()

Tuples i Python har bare to metoder. count() teller hvor mange ganger en verdi forekommer:

dager = ("mandag", "tirsdag", "tirsdag", "onsdag")
dager.count("tirsdag") gir 2

index() returnerer indeksen til den første forekomsten av en verdi:

dager.index("onsdag") gir 3

At tuples bare har to metoder er en konsekvens av immutabiliteten. Alle metoder som endrer data (append, remove, sort) finnes ikke fordi de ville brutt garantien om at tuplen er uforanderlig.

Når bør du bruke tuples fremfor lister?

Bruk tuples når dataene har en fast struktur som ikke skal endres. Klassiske eksempler:

  • Koordinater: (59.91, 10.75)
  • RGB-farger: (255, 128, 0)
  • Databaserader: ("Petter", 18, "petter@eksempel.no")
  • Funksjoner som returnerer flere verdier: return min_verdi, maks_verdi

Bruk lister når du trenger å legge til, fjerne eller endre elementer over tid. En handleliste, en kø med oppgaver, eller en samling brukere som vokser og krymper, er alle situasjoner der lister passer bedre.

Tuples er også raskere enn lister fordi Python kan optimalisere lagringen når den vet at dataene ikke endres. For de fleste programmer er forskjellen neglisjerbar, men i kode som prosesserer millioner av datapunkter kan det merkes.

Named tuples: tuples med navn

Standard tuples bruker indekser, som kan være vanskelige å lese. Python tilbyr named tuples fra collections-modulen, der hvert felt har et navn:

from collections import namedtuple
Punkt = namedtuple("Punkt", ["x", "y"])
p = Punkt(59.91, 10.75)
p.x gir 59.91

Named tuples gir deg lesbarheten til en dictionary med ytelsen og immutabiliteten til en tuple. De er et godt alternativ når du har tuples med mer enn to-tre elementer og indeksene begynner å bli uoversiktlige.

Neste steg

Nå som du kjenner alle hoveddatastrukturene i Python, er neste steg å lære om funksjoner der du bruker tuples til å returnere flere verdier fra en funksjon. Vil du forstå samspillet mellom lister, tuples og dictionaries bedre, kan du lese om list comprehension. Pythons offisielle dokumentasjon har en grundig forklaring av tuples og deres rolle i språket.

Denne videoen er hentet fra kurset Python - grunnleggende på Utdannet.no. I det fulle kurset utforsker du tuples i Python gjennom praktiske øvelser, lærer å bruke utpakking i funksjoner og løkker, og forstår når du bør velge tuples fremfor andre datastrukturer.