Cum să sortați liste în Python

Acest ghid te va iniția în arta sortării listelor în Python.

În universul Python, dispui de metoda sort() pentru a ordona o listă direct, modificând-o. Alternativ, funcția sorted() creează o copie ordonată a listei, lăsând originalul intact.

Acest tutorial îți va dezvălui:

  • Structura sintactică a metodei sort() și a funcției sorted().
  • Exemple practice de ordonare a listelor în mod crescător și descrescător.
  • Personalizarea sortării prin intermediul parametrului cheie.
  • Diferențele esențiale dintre sort() și sorted().

Să începem călătoria! 🚀

Structura sintactică a metodei sort() în Python

Metoda sort() acționează direct asupra unei liste Python, ordonând-o în loc, ceea ce înseamnă că lista inițială este modificată.

Sintaxa metodei sort() în Python este:

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

Să analizăm mai îndeaproape această structură:

  • <listă> reprezintă orice listă Python validă.
  • reverse este un parametru opțional, care poate primi valorile True sau False.
  • Valoarea implicită a lui reverse este False, ordonând lista în mod crescător. Dacă setezi True, lista va fi sortată descrescător.
  • key este, de asemenea, un parametru opțional, setat la o funcție <funcție>.
  • Această <funcție> poate fi o funcție predefinită sau una creată de utilizator.

În secțiunea următoare, vom explora câteva exemple practice.

Cum să sortezi o listă Python în ordine crescătoare

Să presupunem că avem o listă de numere. Pentru a o sorta în ordine crescătoare, vom apela metoda sort() a listei.

▶ Rulează următorul cod:

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

# Ieșire: [6, 9, 13, 17, 25]

Numerele au fost ordonate crescător, iar lista originală a suferit modificări. Acesta este un exemplu de sortare în loc.

Cum să sortezi o listă Python în ordine descrescătoare

Pentru a sorta lista descrescător, setează parametrul reverse la True, după cum urmează:

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

# Ieșire: [25, 17, 13, 9, 6]

Se observă că lista este acum ordonată de la cel mai mare la cel mai mic număr.

Cum se utilizează parametrul key în metoda sort()

În această parte, vom folosi parametrul key pentru a personaliza procesul de sortare.

Vom defini o funcție mod5(), care primește un număr x și returnează restul împărțirii lui x la 5.

def mod5(x):
  return x % 5 

Vom folosi această funcție ca bază pentru sortare.

Rulează următorul cod:

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

# Ieșire: [25, 6, 17, 13, 9]

Analizează rezultatul cu atenție.

În loc de o sortare standard, am personalizat ordonarea folosind funcția mod5 ca referință.

  • Numărul care lasă cel mai mic rest la împărțirea cu 5 este acum primul.
  • Cel care lasă cel mai mare rest este ultimul în lista sortată.

Pentru a confirma, rulează acest cod:

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

for num in nums:
  print(f"{num} are restul {num%5} la împărțirea cu 5")

# Ieșire
25 are restul 0 la împărțirea cu 5
13 are restul 3 la împărțirea cu 5
6 are restul 1 la împărțirea cu 5
17 are restul 2 la împărțirea cu 5
9 are restul 4 la împărțirea cu 5

25 se împarte exact la 5, cu restul 0, deci este primul. 6 lasă restul 1, deci este al doilea, și așa mai departe. 9 lasă restul 4 și este ultimul.

În loc de o funcție separată, poți utiliza și funcții lambda. Acestea sunt funcții anonime, definite pe o singură linie. Structura lambda args : expresie returnează rezultatul evaluării expresiei pe argumentele date.

Să rescriem exemplul de mai sus folosind o expresie lambda:

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

# Ieșire: [25, 6, 17, 13, 9]

Până acum, am ordonat liste de numere. Să vedem acum cum sortăm o listă de șiruri în Python.

Cum să sortezi o listă Python în ordine alfabetică

Vom învăța cum să sortăm o listă de șiruri, cu exemple inspirate din universul Harry Potter. ✨

Avem o listă de studenți de la Hogwarts și vrem să îi sortăm alfabetic după nume.

Când sortăm o listă de șiruri, ordonarea implicită este alfabetică.

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

Să afișăm lista sortată:

students.sort()
print(students)

# Ieșire
['Cedric','Draco', 'Harry', 'Hermione', 'Ron']

Cum să sortezi o listă Python în ordine alfabetică inversă

Pentru a sorta în ordine alfabetică inversă, setează reverse = True, conform exemplului de mai jos:

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

# Ieșire
['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']

Lista este acum sortată alfabetic invers.

Cum să folosești parametrul key pentru a personaliza sortarea

Vom personaliza sortarea folosind parametrul opțional key.

Avem următoarea listă, houses:

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

houses este o listă de dicționare, fiecare având informații despre numele elevului și casa din Hogwarts.

Ne propunem să sortăm lista alfabetic după numele caselor.

Cum probabil ai anticipat, vom folosi parametrul key pentru a indica casa fiecărui student.

Pentru a obține casa unui student, putem defini o funcție returnHouse():

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

Această funcție returnează casa studentului.

Putem apela acum metoda sort():

houses.sort(key=returnHouse)

În rezultatul următor, lista este sortată după nume de casă, nu după numele elevului. De aceea, avem Gryffindor, Hufflepuff și Slytherin, în ordine alfabetică.

print(houses)

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

Putem folosi, de asemenea, o funcție lambda pentru a defini parametrul key. Funcția returnează casa fiecărui element din listă.

▶ Rulează următorul cod pentru a verifica:

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

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

Până acum, am folosit metoda sort(), care modifică lista inițială.

Dar dacă dorim să păstrăm lista originală neschimbată și să obținem doar o copie sortată?

Putem folosi funcția sorted() în acest scop.

Sintaxa funcției sorted() în Python

Funcția sorted() primește o listă sau orice colecție ca argument și returnează o copie sortată, lăsând originalul nemodificat.

Sintaxa funcției sorted() este:

<copie_sortată> = sorted(<listă>, reverse = True | False, key = <funcție>)

Sintaxa seamănă cu cea a metodei sort().

  • <listă> este un obiect listă Python valid și este un parametru obligatoriu.
  • reverse și key sunt parametri opționali.

Reține că, spre deosebire de sort(), care acționează doar asupra listelor, funcția sorted() poate fi folosită pentru a sorta orice iterabil, precum liste, șiruri și dicționare.

Cum să sortezi o listă Python folosind funcția sorted()

#1. nums este o listă de numere:

Apelăm sorted() cu nums și atribuim rezultatul lui sorted_nums1.

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

# Ieșire: [6, 9, 13, 17, 25]

Numerele sunt sortate crescător implicit.

Observă că lista originală nums nu este modificată, deoarece sorted() returnează o listă nouă:

print(nums)
 # Ieșire: [25, 13, 6, 17, 9]

#2. Setăm parametrul opțional reverse la True și obținem sorted_nums2.

După cum vezi, sorted_nums2 este o listă nouă, ordonată descrescător:

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

# Ieșire: [25, 17, 13, 9, 6]

#3. Vom lucra acum cu o listă de șiruri:

La fel ca în exemplele anterioare, sorted() returnează o listă nouă, iar șirurile sunt ordonate alfabetic.

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

# Ieșire:
['apple', 'blueberry', 'pears', 'pineapple', 'strawberry']

#4. Personalizăm sortarea cu parametrul key, setat la len. Lista va fi ordonată în funcție de lungimea șirurilor.

Reține că, în Python, funcția len() primește orice iterabil și returnează lungimea sa.

Șirul cel mai scurt apare primul, iar cel mai lung, ultimul.

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

# Ieșire:
['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']

În rezultatul de mai sus, ‘pear’ este cel mai scurt, iar ‘strawberry’ este cel mai lung.

Metoda sort() vs. Funcția sorted() în Python

Am învățat cum să folosim sort() și sorted(). Să recapitulăm diferențele dintre ele:

Metoda Python .sort() Funcția Python sorted()
Sortează lista în loc, modificând-o. Returnează o listă nouă, sortată.
Funcționează doar cu liste Python. Funcționează cu iterabile, precum liste, șiruri și alte colecții.
Tipul returnat este None. Returnează o copie sortată.

Rezumat 👩‍🏫

Sper că acest ghid despre sortarea listelor în Python ți-a fost util.

Să recapitulăm rapid ce am învățat:

  • Folosește listă.sort(reverse = True | False, key = <funcție>) cu parametrii opționali reverse și key pentru a sorta o listă.
  • Folosește sorted(listă, reverse = True | False, key = <funcție>) pentru a obține o copie sortată a listei.

Acum că știi cum să sortezi liste, explorează înțelegerea listelor în Python. Poți învăța, de asemenea, cum să gestionezi fișierele sau să lucrezi cu fișiere JSON în Python.

Încearcă exemplele de mai sus în compilatorul online de Python de pe tipstrick.ro.