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.