Hur man sorterar listor i Python

Den här artikeln kommer att lära dig hur du sorterar en lista i Python.

I Python kan du använda metoden sort() för att sortera en lista på plats. Eller så kan du använda den inbyggda sorted()-funktionen för att få en sorterad kopia av listan.

I den här handledningen får du lära dig:

  • Syntax för sort()-metoden och sorted()-funktionen
  • Kodexempel på att sortera listor i stigande och fallande ordning
  • Anpassa sorteringen med nyckelparametern
  • Skillnaden mellan sort() och sortered()

Låt oss börja!👩🏽‍💻

Syntax för Python sort()-metoden

Metoden sort() fungerar på en Python-lista. Och den sorterar listan på plats – och modifierar den ursprungliga listan.

Syntaxen för Pythons sort()-metod är:

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

Låt oss nu analysera ovanstående syntax.

  • är vilket som helst giltigt Python-listobjekt.
  • reverse är en valfri parameter som tar antingen True eller False.
  • Standardvärdet för reverse är False, och listan sorteras i stigande ordning. Ge True för att sortera listan i fallande ordning.
  • key är också en valfri parameter som är inställd på .
  • kan vara en inbyggd funktion eller en användardefinierad funktion.

I nästa avsnitt börjar du koda enkla exempel.

Hur man sorterar Python-listan i stigande ordning

Tänk på listnumren. För att sortera listan i stigande ordning kan du anropa metoden sort() på listan.

▶ Kör följande kodavsnitt.

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

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

Listnumren har sorterats i stigande ordning och den ursprungliga listan har ändrats. Detta kallas platssortering.

Hur man sorterar Python-listan i fallande ordning

För att sortera listan i fallande ordning, ställ omvänd till True, som visas nedan.

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

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

Du kan se att listan nu är sorterad i fallande ordning.

Hur man använder nyckel med Python sort()-metoden

Låt oss i det här avsnittet använda nyckelparametern och anpassa sorteringen.

Här är mod5() en funktion som tar in ett tal x och returnerar resten när talet x divideras med 5.

def mod5(x):
  return x % 5 

Och vi skulle vilja använda ovanstående funktion som nyckel.

Kör nu följande kodcell.

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

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

Ta en minut att analysera utdata.

Lägg märke till hur du istället för den vanliga sorteringen nu anpassar din sortering enligt nyckeln som är mod5.

  • Antalet som lämnar den minsta återstoden när de divideras med 5 kommer först nu.
  • Och talet som lämnar den största resten när de divideras med 5 är det sista elementet i den sorterade listan.

För att verifiera att så är fallet, kör följande kodavsnitt.

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 delar exakt 25, och resten är 0. Så det är det första elementet i den sorterade listan. 6 lämnar en rest 1, så det är det andra elementet, och så vidare. 9 lämnar resten 4 när de divideras med 5, och det är det sista elementet i den sorterade listan.

Istället för att definiera en separat funktion kan du lika gärna använda lambdafunktioner. I Python är lambdas anonyma funktioner på en rad. lambda args : expression returnerar uttrycket beräknat på args.

Låt oss nu skriva om ovanstående sortering med lambda-uttrycket, som visas nedan.

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

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

Hittills har du lärt dig hur man sorterar en lista med siffror. Låt oss sedan se hur du kan sortera en lista med strängar i Python.

Hur man sorterar Python-listan i alfabetisk ordning

I det här avsnittet får du lära dig att sortera en lista med strängar – med exempel inspirerade av Harry Potter. ✨

I vårt exempel är eleverna en lista över elever på Hogwarts. Och vi skulle vilja sortera dem i alfabetisk ordning efter deras namn.

När du sorterar en lista med strängar är standardsortering i alfabetisk ordning.

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

Låt oss skriva ut den sorterade listan för att verifiera resultatet av sorteringen.

students.sort()
print(students)

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

Hur man sorterar Python-listan i omvänd alfabetisk ordning

För att sortera listan i omvänd alfabetisk ordning, ställ in reverse = True, som visas i kodavsnittet nedan.

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

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

Från utgången kan du se att listan verkligen har sorterats i omvänd ordning.

Hur man använder nyckelparameter Anpassa sortering

Låt oss i det här avsnittet anpassa sorteringen med den valfria nyckelparametern.

Tänk på följande lista, hus.

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

Här är hus en lista över ordböcker. Varje ordbok innehåller två nyckel-värdepar, ett anger elevernas namn och det andra huset som de tillhör.

Nu skulle vi vilja sortera den här listan hus i alfabetisk ordning av husen de tillhör.

Som du kanske har gissat vid det här laget bör vi ställa in nyckelparametern till de särskilda studenternas hus.

För att hämta huset för varje elev kan du definiera en funktion returnHouse(), som visas nedan.

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

Denna funktion returnerar huset som den aktuella studenten tillhör.

Nu kan du anropa sort()-metoden på huslistan, som visas.

houses.sort(key=returnHouse)

Lägg märke till hur listan är sorterad efter huset och inte elevernas namn i utgången nedan. Det är därför vi har Gryffindor, Hufflepuff och Slytherin – i alfabetisk ordning.

print(houses)

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

För att definiera nyckelparametern i enlighet därmed kan du också använda en lambda-funktion. För varje listobjekt returnerar den här funktionen huset för det listobjektet.

▶ Kör följande kodcell för att verifiera detta.

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

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

I alla exempel hittills har du använt sort()-metoden på en lista. Och du vet nu att det ändrar den ursprungliga listan.

Vad händer om du vill behålla den ursprungliga listan som den är men skaffa en sorterad kopia av listan?

Tja, i Python kan du använda funktionen sorted() för att göra detta.

Syntax för Python sorted() Funktion

Funktionen sorted() tar in en lista eller valfri samling som argument. Och den returnerar en sorterad kopia av listan – och den ursprungliga listan ändras inte.

Syntaxen för Pythons sorted() funktion är:

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

Lägg märke till hur syntaxen är mycket lik sort()-metoden vi såg tidigare.

  • är ett giltigt Python-listobjekt och är en obligatorisk parameter.
  • reverse och key är valfria parametrar

Obs: Till skillnad från sort()-metoden som bara fungerar på listor, kan sorted()-funktionen användas för att sortera alla Python iterable, såsom listor, strängar och ordböcker.

Hur man sorterar Python-listan med hjälp av sorted()-funktionen

#1. I det här exemplet är nums en lista med siffror.

Du kan anropa funktionen sorted() med nums som argument. Och tilldela den till listan sorted_nums1.

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

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

I utgången ovan kan du se att nums har sorterats i stigande ordning som standard.

Lägg också märke till att de ursprungliga listnumren inte ändras – eftersom sorted() returnerar en ny lista. Detta verifieras nedan.

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

#2. Ställ nu in den valfria parametern omvänd till True och få sorted_nums2.

Som visas i kodcellen nedan är sorted_nums2 en ny lista med objekten sorterade i fallande ordning.

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

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

#3. I det här exemplet, låt oss arbeta med en lista med strängar.

Som med de tidigare exemplen returnerar anrop av funktionen sorted() en ny lista. Och föremålen är sorterade i alfabetisk ordning.

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

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

#4. Låt oss nu anpassa sorteringen med den valfria nyckelparametern. Ställ in nyckeln på len. Detta kommer att sortera listan baserat på längden på strängarna.

Obs: I Python tar den inbyggda len()-funktionen in alla itererbara, såsom listor, sträng, tupler och så vidare. Och det returnerar längden på det iterbara.

Strängen med den kortaste längden visas först i den sorterade listan, och den längsta strängen visas i slutet av den sorterade listan.

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

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

I utgången ovan är päron den kortaste strängen och jordgubbar den längsta strängen.

Python sort() Metod vs. sorted() Funktion

Hittills har du lärt dig hur du använder sort()-metoden såväl som sortered()-funktionen. Låt oss i det här avsnittet räkna upp skillnaderna mellan dessa två metoder.

Python .sort() MetodPython sorted() FunktionSorterar listan på plats – ändrar den ursprungliga listan Returnerar en ny sorterad lista Fungerar endast med Python-listor Fungerar med Python iterables som listor, strängar och andra samlingarHar returtypen IngenReturnerar en sorterad kopia av den iterable

Sammanfattning 👩‍🏫

Jag hoppas att du tyckte att den här Python listhandledningen var användbar.

Låt oss snabbt sammanfatta vad vi har täckt.

  • Använd list.sort(reverse = True | False, key = ) med de valfria reverse- och nyckelparametrarna för att sortera en lista på plats.
  • Använd sorted(list, reverse = True | False, key = ) för att få en sorterad kopia av listan.

Nu när du har lärt dig hur du sorterar Python-listor kan du lära dig mer om listförståelse i Python. Eller så kan du lika gärna lära dig hur du hanterar filer eller arbetar med JSON-filer i Python.

Du kan prova exemplen ovan i adminvista.com Online Python Compiler.