Tupler och mängder

Använda oföränderliga tupler och unika mängder (sets) för specifika databehov.

Ca 45 min · del av Programmering i Python

Begrepp i lektionen

  • tuple
  • set
  • immutabilitet
  • mängdoperationer

Efter denna lektion förstår du hur du använder oföränderliga tupler och unika mängder (sets) i Python för att skriva säkrare, tydligare och mer effektiv kod.

Introduktion till tupler (Tuples)

En tuple i Python är en ordnad sekvens av element, mycket lik en vanlig lista. Den avgörande skillnaden är att en tuple är oföränderlig (immutable). När en tuple har skapats kan du inte lägga till, ta bort eller ändra element i den.

Du skapar en tuple genom att omsluta elementen med vanligt förekommande parenteser `()` instället för hakparenteser `[]`:

python

En tuple med två element (t.ex. GPS-koordinater)

position = (59.3293, 18.0686)

En tuple med blandade datatyper

anvandar_info = ("Alice", 28, True)

Varför använda tupler istället för listor?

1. Dataintegritet: Om du har värden som inte får ändras under programkörningen (t.ex. inställningar, koordinater, RGB-färgkoder) garanterar en tuple att koden inte råkar ändra dem.

2. Prestanda och minne: Tupler tar något mindre minne och är snabbare att hantera för Python än listor.

3. Nycklar i dictionaries: Eftersom tupler är oföränderliga kan de användas som nycklar i en dictionary, vilket listor inte kan.

Du kommer åt element i en tuple exakt som i en lista med indexering: `position[0]` ger `59.3293`.

Tuple-uppackning och funktioner

En kraftfull egenskap hos tupler i Python är uppackning (tuple unpacking). Detta innebär att du kan tilldela alla element i en tuple till enskilda variabler på en enda rad.

python

Skapa en tuple

punkt = (10, 20)

Packa upp i variablerna x och y

x, y = punkt

print(x) # Skriver ut 10

print(y) # Skriver ut 20

Returvärden från funktioner:

I Python kan en funktion skenbart returnera flera värden. I själva verket returnerar den då en tuple som du direkt kan packa upp:

python

def henta_statistik(tallista):

minsta = min(tallista)

storsta = max(tallista)

return minsta, storsta # Returnerar tuplen (minsta, storsta)

Anrop och direkt uppackning

laga, hoga = henta_statistik([4, 1, 9, 2, 7])

print(laga) # 1

print(hoga) # 9

Tips: Om du råkar skapa en tuple med endast ett element måste du inkludera ett avslutande kommatecken, t.ex. `enkel_tuple = (5,)`. Annars tolkas parenteserna bara som en vanlig matematiskt prioritetsomslutning.

Introduktion till mängder (Sets)

En mängd (`set`) i Python motsvarar begreppet mängd inom matematiken. Det är en oordnad samling av unika element.

Det finns två avgörande egenskaper hos ett `set`:

1. Inga dubbletter: Om du försöker lägga till ett element som redan finns ignoreras det tyst.

2. Ingen ordning: Elementen har inga index. Du kan inte skriva `mitt_set[0]`.

Du skapar ett set med måsvingar `{}` eller funktionen `set()`:

python

Skapa ett set med unika frukter

frukter = {"äpple", "banan", "apelsin"}

Rensa bort dubbletter från en lista

tal_med_dubbletter = [1, 2, 2, 3, 4, 4, 4, 5]

unika_tal = set(tal_med_dubbletter)

print(unika_tal) # {1, 2, 3, 4, 5}

*Observera:* För att skapa ett tomt set måste du skriva `tomt = set()`. Om du skriver `tomt = {}` skapas istället en tom dictionary!

Mängdoperationer (Set Operations)

Mängder är extremt användbara när du vill jämföra två samlingar av data. Python har inbyggda operatorer för alla klassiska mängdoperationer:

python

A = {1, 2, 3, 4}

B = {3, 4, 5, 6}

1. Union (`|` eller `union()`): Alla element som finns i A, B eller båda.

`A | B` ger `{1, 2, 3, 4, 5, 6}`

2. Snitt / Intersection (`&` eller `intersection()`): Endast element som finns i BÅDE A och B.

`A & B` ger `{3, 4}`

3. Differens (`-` eller `difference()`): Element som finns i A men INTE i B.

`A - B` ger `{1, 2}`

4. Symmetrisk differens (`^` eller `symmetric_difference()`): Element som finns i antingen A eller B, men INTE i båda.

`A ^ B` ger `{1, 2, 5, 6}`

Prestanda och medlemstestning

En stor praktisk anledning att använda ett `set` istället för en `lista` är sökprestanda vid medlemstestning med operatorn `in`.

Sökning i lista – O(n):

Om du söker efter ett element i en lista med `x in min_lista`, måste Python gå igenom listan element för element från början. Om listan har 1 miljon element kan det ta 1 miljon jämförelser i värsta fall.

Sökning i set – O(1):

Ett `set` använder en teknik som kallas *hashing* (hashtabell). Det gör att Python kan hoppa direkt till rätt minnesadress oavsett hur stort mängden är. Sökningen tar i genomsnitt lika kort tid om setet innehåller 10 element som om det innehåller 10 miljoner element!

Hela kursen