Sådan sorteres lister i Python

Denne artikel vil lære dig, hvordan du sorterer en liste i Python.

I Python kan du bruge sort()-metoden til at sortere en liste på plads. Eller du kan bruge den indbyggede sorted()-funktion til at få en sorteret kopi af listen.

I denne tutorial lærer du:

  • Syntaks for sort()-metoden og sorted()-funktionen
  • Kode eksempler på sortering af lister i stigende og faldende rækkefølge
  • Tilpas sortering ved hjælp af nøgleparameteren
  • Forskellen mellem sort() og sorteret()

Lad os starte!👩🏽‍💻

Syntaks for Python sort() metode

Sort()-metoden virker på en Python-liste. Og den sorterer listen på plads – og ændrer den originale liste.

Syntaksen for Pythons sort() metode er:

<list>.sort(reverse = True | False, key = <func>)

Lad os nu analysere ovenstående syntaks.

  • er et hvilket som helst gyldigt Python-listeobjekt.
  • reverse er en valgfri parameter, der tager enten True eller False.
  • Standardværdien for reverse er False, og listen er sorteret i stigende rækkefølge. Giv True for at sortere listen i faldende rækkefølge.
  • key er også en valgfri parameter, der er sat til .
  • kan være en indbygget funktion eller en brugerdefineret funktion.

I næste afsnit begynder du at kode simple eksempler.

Sådan sorteres Python-listen i stigende rækkefølge

Overvej listenumrene. For at sortere listen i stigende rækkefølge kan du kalde sort()-metoden på listen.

▶ Kør følgende kodestykke.

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

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

Listenumrene er sorteret i stigende rækkefølge, og den oprindelige liste er blevet ændret. Dette kaldes in-place sortering.

Sådan sorteres Python-listen i faldende rækkefølge

For at sortere listen i faldende rækkefølge skal du indstille omvendt til Sand, som vist nedenfor.

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

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

Du kan se, at listen nu er sorteret i faldende rækkefølge.

Sådan bruges nøgle med Python sort()-metoden

Lad os i dette afsnit bruge nøgleparameteren og tilpasse sorteringen.

Her er mod5() en funktion, der tager et tal x ind og returnerer resten, når tallet x divideres med 5.

def mod5(x):
  return x % 5 

Og vi vil gerne bruge ovenstående funktion som nøglen.

Kør nu følgende kodecelle.

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

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

Brug et minut på at parse outputtet.

Læg mærke til, hvordan du i stedet for den almindelige sortering nu tilpasser din sortering efter nøglen, som er mod5.

  • Det tal, der efterlader minimumsresten, når det divideres med 5, kommer først nu.
  • Og det tal, der efterlader den største rest, når det divideres med 5, er det sidste element i den sorterede liste.

For at bekræfte, at dette er tilfældet, skal du køre følgende kodestykke.

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

for num in nums:
  print(f"{num} leaves remainder {num%5} when divided by 5")

# Output
25 leaves remainder 0 when divided by 5
13 leaves remainder 3 when divided by 5
6 leaves remainder 1 when divided by 5
17 leaves remainder 2 when divided by 5
9 leaves remainder 4 when divided by 5

5 deler 25 nøjagtigt, og resten er 0. Så det er det første element i den sorterede liste. 6 efterlader en resterende 1, så det er det andet element, og så videre. 9 efterlader resten 4, når de divideres med 5, og det er det sidste element i den sorterede liste.

I stedet for at definere en separat funktion, kan du lige så godt bruge lambda funktioner. I Python er lambdaer anonyme funktioner på én linje. lambda args: udtryk returnerer udtrykket beregnet på args.

Lad os nu omskrive ovenstående sortering ved hjælp af lambda-udtrykket, som vist nedenfor.

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

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

Indtil videre har du lært, hvordan du sorterer en liste med tal. Lad os derefter se, hvordan du kan sortere en liste over strenge i Python.

Sådan sorteres Python-listen i alfabetisk rækkefølge

I dette afsnit lærer du at sortere en liste over strenge – med eksempler inspireret af Harry Potter. ✨

I vores eksempel er eleverne en liste over elever på Hogwarts. Og vi vil gerne sortere dem i alfabetisk rækkefølge efter deres navne.

Når du sorterer en liste over strenge, er standardsortering i alfabetisk rækkefølge.

students = ["Harry","Ron","Hermione","Draco","Cedric"]

Lad os udskrive den sorterede liste for at verificere resultatet af sorteringen.

students.sort()
print(students)

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

Sådan sorteres Python-listen i omvendt alfabetisk rækkefølge

For at sortere listen i omvendt alfabetisk rækkefølge skal du indstille omvendt = Sand, som vist i kodestykket nedenfor.

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

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

Fra outputtet kan du se, at listen faktisk er blevet sorteret i omvendt rækkefølge.

Sådan bruges nøgleparameter Tilpas sortering

Lad os i dette afsnit tilpasse sorteringen ved hjælp af den valgfri nøgleparameter.

Overvej følgende liste, huse.

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

Her er huse en liste over ordbøger. Hver ordbog indeholder to nøgle-værdi-par, det ene angiver elevernes navne og det andet det hus, de tilhører.

Nu vil vi gerne sortere denne liste huse i alfabetisk rækkefølge af huse, de tilhører.

Som du måske har gættet nu, bør vi indstille nøgleparameteren til de særlige elevers hus.

For at hente hver elevs hus kan du definere en funktion returnHouse(), som vist nedenfor.

def returnHouse(student):
  return student['house']

Denne funktion returnerer det hus, som den pågældende elev tilhører.

Nu kan du kalde sort()-metoden på huslisten, som vist.

houses.sort(key=returnHouse)

I outputtet nedenfor kan du se, hvordan listen er sorteret efter huset og ikke elevernes navne. Det er derfor, vi har Gryffindor, Hufflepuff og Slytherin – i alfabetisk rækkefølge.

print(houses)

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

For at definere nøgleparameteren i overensstemmelse hermed kan du også bruge en lambda-funktion. For hvert listeelement returnerer denne funktion huset for det listeelement.

▶ Kør følgende kodecelle for at bekræfte dette.

houses.sort(key=lambda student:student["house"])
print(houses)

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

I alle eksemplerne hidtil har du brugt sort()-metoden på en liste. Og du ved nu, at det ændrer den originale liste.

Hvad hvis du gerne vil beholde den originale liste, som den er, men få en sorteret kopi af listen?

Nå, i Python kan du bruge funktionen sorted() til at gøre dette.

Syntaks for Python sorted() Funktion

Funktionen sorted() tager en liste eller enhver samling som argument. Og den returnerer en sorteret kopi af listen – og den originale liste er ikke ændret.

Syntaksen for Pythons sorted() funktion er:

<sorted_copy> = sorted(<list>, reverse = True | False, key = <func>)

Læg mærke til, hvordan syntaksen minder meget om sort()-metoden, vi så tidligere.

  • er et hvilket som helst gyldigt Python-listeobjekt og er en påkrævet parameter.
  • reverse og key er valgfrie parametre

Bemærk: I modsætning til sort()-metoden, der kun virker på lister, kan sorted()-funktionen bruges til at sortere enhver iterabel Python, såsom lister, strenge og ordbøger.

Sådan sorteres Python-listen ved hjælp af sorted()-funktionen

#1. I dette eksempel er nums en liste over tal.

Du kan kalde funktionen sorted() med nums som argument. Og tildel den til listen sorted_nums1.

nums = [25,13,6,17,9]
sorted_nums1 = sorted(nums)
print(sorted_nums1)

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

I outputtet ovenfor kan du se, at nums er blevet sorteret i stigende rækkefølge som standard.

Bemærk også, at de oprindelige listenumre ikke er ændret – fordi sorted() returnerer en ny liste. Dette er verificeret nedenfor.

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

#2. Indstil nu den valgfri parameter reverse til True og få sorted_nums2.

Som vist i kodecellen nedenfor er sorted_nums2 en ny liste med emnerne sorteret i faldende rækkefølge.

sorted_nums2 = sorted(nums,reverse = True)
print(sorted_nums2)

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

#3. Lad os i dette eksempel arbejde med en liste over strenge.

Som med de foregående eksempler returnerer kald af funktionen sorted() en ny liste. Og emnerne er sorteret i alfabetisk rækkefølge.

fruits = ['pears','strawberry','apple','pineapple','blueberry']
sorted_fr1 = sorted(fruits)
print(sorted_fr1)

# Output:
['apple', 'blueberry', 'pears', 'pineapple', 'strawberry']

#4. Lad os nu tilpasse sorteringen ved hjælp af den valgfrie nøgleparameter. Indstil nøglen til len. Dette vil sortere listen baseret på længden af ​​strengene.

Bemærk: I Python tager den indbyggede len()-funktion enhver iterable ind, såsom lister, streng, tupler og så videre. Og det returnerer længden af ​​den iterable.

Strengen med den korteste længde vises først i den sorterede liste, og den længste streng vises i slutningen af ​​den sorterede liste.

fruits = ['pear','strawberry','apple','pineapple','blueberry']
sorted_fr2 = sorted(fruits,key=len)
print(sorted_fr2)

# Output:
['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']

I outputtet ovenfor er pære den korteste streng, og jordbær er den længste streng.

Python sort() Metode vs. sorted() Funktion

Indtil videre har du lært, hvordan du bruger metoden sort() såvel som sorteret()-funktionen. Lad os i dette afsnit opregne forskellene mellem disse to metoder.

Python .sort() MetodePython sorted() FunktionSorterer listen på plads – modificerer den originale listeReturnerer en ny sorteret listeVirker kun med Python-listerVårker med Python-iterabler såsom lister, strenge og andre samlingerHar returtype IngenReturnerer en sorteret kopi af den iterable

Opsummering 👩‍🏫

Jeg håber, du fandt denne Python-listevejledning nyttig.

Lad os hurtigt opsummere, hvad vi har dækket.

  • Brug list.sort(reverse = True | False, key = ) med de valgfri reverse og nøgleparametre til at sortere en liste på plads.
  • Brug sorted(list, reverse = True | False, key = ) for at få en sorteret kopi af listen.

Nu hvor du har lært, hvordan du sorterer Python-lister, kan du lære om listeforståelse i Python. Eller du kan lige så godt lære at håndtere filer eller arbejde med JSON-filer i Python.

Du kan prøve eksemplerne givet ovenfor i toadmin.dk Online Python Compiler.

  Sådan lytter du til Spotify offline på et Samsung-ur