Sorter Python-lister: sort() vs. sorted() – komplett guide!

Denne artikkelen gir en detaljert innføring i hvordan man sorterer lister i Python.

Python tilbyr to hovedmetoder for å sortere lister: `sort()`-metoden, som sorterer listen direkte (endrer den opprinnelige listen), og den innebygde `sorted()`-funksjonen, som returnerer en ny, sortert liste uten å endre den originale.

I denne veiledningen vil du lære om:

  • Syntaksen for `sort()`-metoden og `sorted()`-funksjonen.
  • Eksempler på hvordan man sorterer lister i stigende og synkende rekkefølge.
  • Tilpasning av sorteringen ved hjelp av `key`-parameteren.
  • Forskjellen mellom `sort()` og `sorted()`.

La oss begynne! 👩🏽‍💻

Syntaks for Python `sort()`-metoden

`sort()`-metoden er designet for å fungere direkte på en Python-liste. Den modifiserer den eksisterende listen ved å sortere elementene på plass.

Den grunnleggende syntaksen for `sort()`-metoden er som følger:

<liste>.sort(reverse = True | False, key = <funksjon>)

La oss se nærmere på de ulike delene av syntaksen:

  • `<liste>` er selve listen som skal sorteres.
  • `reverse` er en valgfri parameter som kan settes til `True` eller `False`. Standardverdien er `False`, som sorterer listen i stigende rekkefølge. Hvis `True` spesifiseres, sorteres listen i synkende rekkefølge.
  • `key` er en annen valgfri parameter som lar deg spesifisere en funksjon (`<funksjon>`) som skal brukes som sorteringsnøkkel.

Nå skal vi se på noen enkle kodeeksempler.

Hvordan sortere en Python-liste i stigende rekkefølge

For å sortere en liste i stigende rekkefølge, kaller du enkelt `sort()`-metoden direkte på listen.

▶ Ta en titt på følgende kodeeksempel:

tall = [25, 13, 6, 17, 9]
tall.sort()
print(tall)

# Output: [6, 9, 13, 17, 25]

Som vi kan se, er listen med tall nå sortert i stigende rekkefølge. Den opprinnelige listen er endret. Dette er en såkalt «in-place» sortering.

Hvordan sortere en Python-liste i synkende rekkefølge

For å sortere en liste i synkende rekkefølge, må du sette `reverse`-parameteren til `True`, slik som vist i kodesnutten under:

tall = [25, 13, 6, 17, 9]
tall.sort(reverse = True)
print(tall)

# Output: [25, 17, 13, 9, 6]

Nå er listen sortert i synkende rekkefølge.

Hvordan bruke `key`-parameteren med Python `sort()`-metoden

La oss nå bruke `key`-parameteren for å tilpasse sorteringsprosessen.

Vi definerer først en funksjon `mod5(x)`, som returnerer resten når tallet `x` deles på 5:

def mod5(x):
  return x % 5 

Denne funksjonen vil vi bruke som nøkkel for sorteringen.

Kjør følgende kode:

tall = [25, 13, 6, 17, 9]
tall.sort(key = mod5)
print(tall)

# Output: [25, 6, 17, 13, 9]

Analyser utdataene nøye.

I stedet for å sortere tallene direkte, har vi nå tilpasset sorteringen basert på restverdien når tallene deles på 5.

  • Tallet som gir den minste resten når det deles på 5 kommer først.
  • Tallet som gir den største resten når det deles på 5 er det siste elementet i den sorterte listen.

For å bekrefte dette, kjør følgende kode:

tall = [25, 13, 6, 17, 9]

for num in tall:
  print(f"{num} gir resten {num%5} når det deles på 5")

# Output
25 gir resten 0 når det deles på 5
13 gir resten 3 når det deles på 5
6 gir resten 1 når det deles på 5
17 gir resten 2 når det deles på 5
9 gir resten 4 når det deles på 5

25 deles nøyaktig med 5 og gir en rest på 0, så det kommer først i den sorterte listen. 6 gir resten 1 og kommer som nummer to. Og så videre. 9 gir en rest på 4 og er derfor sist.

I stedet for å definere en egen funksjon kan du også bruke lambda-funksjoner. En lambda-funksjon er en anonym funksjon på én linje. Syntaksen er `lambda args : uttrykk`, der uttrykket evalueres og returneres basert på argumentene.

La oss bruke lambda-uttrykk for å omformulere sorteringen fra forrige eksempel:

tall = [25, 13, 6, 17, 9]
tall.sort(key = lambda x:x%5)
print(tall)

# Output: [25, 6, 17, 13, 9]

Så langt har vi sett hvordan man sorterer tallister. La oss se hvordan man sorterer en liste med strenger i Python.

Hvordan sortere en Python-liste i alfabetisk rekkefølge

I denne seksjonen lærer du hvordan du sorterer en liste med strenger alfabetisk, med eksempler inspirert av Harry Potter ✨.

I vårt eksempel er `elever` en liste over elever ved Galtvort, som vi ønsker å sortere alfabetisk etter navn.

Når man sorterer en liste med strenger, sorteres den automatisk alfabetisk.

elever = ["Harry", "Ron", "Hermine", "Draco", "Cedric"]

La oss skrive ut den sorterte listen for å bekrefte resultatet:

elever.sort()
print(elever)

# Output
['Cedric', 'Draco', 'Harry', 'Hermine', 'Ron']

Hvordan sortere en Python-liste i omvendt alfabetisk rekkefølge

For å sortere listen i omvendt alfabetisk rekkefølge, sett `reverse = True`, som vist i koden nedenfor.

elever.sort(reverse = True)
print(elever)

# Output
['Ron', 'Hermine', 'Harry', 'Draco', 'Cedric']

Resultatet viser at listen nå er sortert i omvendt alfabetisk rekkefølge.

Hvordan bruke `key`-parameteren for å tilpasse sortering

Nå skal vi se hvordan man tilpasser sorteringen ved å bruke den valgfrie `key`-parameteren.

Se på følgende liste kalt `hus`:

hus = [
            {1: "Draco", "hus": "Slytherin"},
            {2: "Harry", "hus": "Gryffindor"},
            {3: "Cedric", "hus": "Hufflepuff"}
         ]

`hus` er en liste over ordbøker, der hver ordbok inneholder to nøkkel/verdi-par: elevens navn og hvilket hus de tilhører.

Vi ønsker å sortere denne listen etter husene i alfabetisk rekkefølge.

Vi kan oppnå dette ved å bruke `key`-parameteren og referere til huset til hver elev.

For å hente huset til en gitt elev, kan vi definere en funksjon `returnHouse()`:

def returnHouse(elev):
  return elev['hus']

Denne funksjonen returnerer huset for den aktuelle eleven.

Nå kan vi kalle `sort()`-metoden på `hus`-listen:

hus.sort(key=returnHouse)

Utdataene viser at listen nå er sortert etter hus, og ikke etter elevens navn: Gryffindor, Hufflepuff og Slytherin kommer i alfabetisk rekkefølge.

print(hus)

# Output
[{2: 'Harry', 'hus': 'Gryffindor'}, 
{3: 'Cedric', 'hus': 'Hufflepuff'}, 
{1: 'Draco', 'hus': 'Slytherin'}]

Vi kan også bruke en lambda-funksjon for å definere `key`-parameteren. Lambda-funksjonen returnerer huset for hvert element i listen.

▶ Kjør følgende kode for å bekrefte:

hus.sort(key=lambda elev:elev["hus"])
print(hus)

# Output
[{2: 'Harry', 'hus': 'Gryffindor'}, 
{3: 'Cedric', 'hus': 'Hufflepuff'}, 
{1: 'Draco', 'hus': 'Slytherin'}]

Alle eksemplene så langt har brukt `sort()`-metoden, som vi nå vet endrer den opprinnelige listen.

Hva om vi ønsker å beholde den opprinnelige listen uendret og få en sortert kopi?

Da kan vi bruke `sorted()`-funksjonen.

Syntaks for Python `sorted()`-funksjonen

`sorted()`-funksjonen tar en liste (eller en annen samling) som argument og returnerer en ny, sortert kopi uten å endre den opprinnelige listen.

Syntaksen for `sorted()` er som følger:

<sortert_kopi> = sorted(<liste>, reverse = True | False, key = <funksjon>)

Merk at syntaksen ligner på `sort()`-metoden.

  • `<liste>` er den listen som skal sorteres, og den er en obligatorisk parameter.
  • `reverse` og `key` er valgfrie parametere.

Viktig å merke seg: I motsetning til `sort()`-metoden, som bare fungerer på lister, kan `sorted()`-funksjonen brukes til å sortere alle Python-itererbare objekter, som lister, strenger og ordbøker.

Hvordan sortere en Python-liste ved hjelp av `sorted()`-funksjonen

#1. La oss bruke `tall` som er en liste over tall.

Vi kaller `sorted()`-funksjonen med `tall` som argument, og tilordner resultatet til `sorterte_tall1`:

tall = [25, 13, 6, 17, 9]
sorterte_tall1 = sorted(tall)
print(sorterte_tall1)

# Output: [6, 9, 13, 17, 25]

Som vi ser, er `tall` sortert i stigende rekkefølge som standard.

Legg merke til at den opprinnelige listen `tall` er uendret, da `sorted()` returnerer en ny liste. Vi bekrefter dette nedenfor:

print(tall)
# Output: [25, 13, 6, 17, 9]

#2. Sett `reverse`-parameteren til `True` for å få `sorterte_tall2`:

Som vist i koden nedenfor er `sorterte_tall2` en ny liste med elementene sortert i synkende rekkefølge.

sorterte_tall2 = sorted(tall, reverse = True)
print(sorterte_tall2)

# Output: [25, 17, 13, 9, 6]

#3. Nå skal vi se på et eksempel med strenger.

Vi kaller `sorted()`-funksjonen, som returnerer en ny liste der elementene er sortert i alfabetisk rekkefølge:

frukt = ['pærer', 'jordbær', 'eple', 'ananas', 'blåbær']
sortert_fr1 = sorted(frukt)
print(sortert_fr1)

# Output:
['ananas', 'blåbær', 'eple', 'jordbær', 'pærer']

#4. Vi kan tilpasse sorteringen ved å bruke `key`-parameteren. La oss sette `key` til `len`. Dette vil sortere listen etter lengden på strengene.

Merk: I Python returnerer den innebygde `len()`-funksjonen lengden på et hvilket som helst itererbart objekt, som lister, strenger og tupler.

Strengen med den korteste lengden kommer først i den sorterte listen, og den lengste strengen kommer sist:

frukt = ['pære', 'jordbær', 'eple', 'ananas', 'blåbær']
sortert_fr2 = sorted(frukt, key=len)
print(sortert_fr2)

# Output:
['pære', 'eple', 'ananas', 'blåbær', 'jordbær']

I utdataene ser vi at «pære» er den korteste strengen, og «jordbær» er den lengste.

Python `sort()`-metoden vs. `sorted()`-funksjonen

Vi har nå lært om både `sort()`-metoden og `sorted()`-funksjonen. La oss oppsummere forskjellene mellom dem:

Python `.sort()`-metoden Python `sorted()`-funksjonen
Sorterer listen direkte (endrer den opprinnelige listen). Returnerer en ny, sortert liste.
Fungerer kun med Python-lister. Fungerer med alle Python-itererbare objekter (lister, strenger osv.).
Returnerer ingenting (har `None` returtype). Returnerer en sortert kopi av den itererbare listen.

Oppsummering 👩‍🏫

Jeg håper denne veiledningen om sortering av lister i Python har vært nyttig.

La oss raskt oppsummere det vi har gått gjennom:

  • Bruk `list.sort(reverse = True | False, key = <funksjon>)` med de valgfrie `reverse`- og `key`-parameterne for å sortere en liste direkte.
  • Bruk `sorted(list, reverse = True | False, key = <funksjon>)` for å få en sortert kopi av listen.

Nå som du har lært å sortere lister i Python, kan du lære om listeforståelse i Python. Du kan også lære hvordan du håndterer filer, eller jobber med JSON-filer.

Du kan prøve eksemplene i denne artikkelen ved hjelp av tipsbilk.net sin Online Python Compiler.