Како сортирати листе у Питхон-у

U ovom članku ćete naučiti kako da izvršite sortiranje liste u programskom jeziku Python.

U Pythonu, možete koristiti metodu sort() da biste sortiranje izvršili direktno nad listom. Takođe, na raspolaganju vam je ugrađena funkcija sorted() koja kreira i vraća sortiranu kopiju liste, ne menjajući originalnu.

U ovom vodiču ćete savladati:

  • Sintaksu metode sort() i funkcije sorted().
  • Primere kodiranja sortiranja lista u rastućem i opadajućem redosledu.
  • Prilagođavanje sortiranja upotrebom parametra key.
  • Razliku između sort() i sorted().

Započnimo!👩🏽‍💻

Sintaksa Python sort() metode

Metoda sort() se primenjuje direktno na Python listu. Ona menja postojeću listu, sortirajući je na licu mesta – to jest, originalna lista se menja.

Sintaksa Python metode sort() je:

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

Detaljnije objašnjenje gornje sintakse:

  • <list> predstavlja bilo koji validan objekat Python liste.
  • reverse je opcioni parametar koji može imati vrednost True ili False.
  • Podrazumevana vrednost za reverse je False, što znači da će lista biti sortirana u rastućem redosledu. Postavite na True da biste sortirali listu u opadajućem redosledu.
  • key je takođe opcioni parametar koji se postavlja na funkciju <func>.
  • <func> može biti ugrađena funkcija ili funkcija koju definiše korisnik.

U narednom odeljku ćete početi sa jednostavnim primerima kodiranja.

Kako sortirati Python listu u rastućem redosledu

Posmatrajmo listu brojeva. Da biste sortiranje obavili u rastućem redosledu, pozovite metodu sort() na samoj listi.

▶ Pokrenite sledeći fragment koda.

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

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

Brojevi u listi su sortirani u rastućem redosledu, a originalna lista je izmenjena. Ovo se naziva sortiranje na licu mesta.

Kako sortirati Python listu u opadajućem redosledu

Da biste listu sortirali u opadajućem redosledu, postavite reverse na True, kao što je prikazano ispod.

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

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

Možete videti da je lista sada sortirana u opadajućem redosledu.

Kako koristiti key sa Python metodom sort()

U ovom delu, iskoristićemo parametar key da prilagodimo sortiranje.

Ovde je definisana funkcija mod5() koja uzima broj x i vraća ostatak pri deljenju broja x sa 5.

def mod5(x):
  return x % 5 

Želimo da upotrebimo gornju funkciju kao ključ za sortiranje.

Sada, pokrenite sledeći blok koda.

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

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

Odvojite trenutak da analizirate izlaz.

Obratite pažnju da umesto standardnog sortiranja, sada prilagođavate sortiranje prema ostatku pri deljenju sa 5 (funkcija mod5).

  • Broj koji daje najmanji ostatak pri deljenju sa 5 sada je prvi.
  • A broj koji daje najveći ostatak pri deljenju sa 5 je poslednji element u sortiranoj listi.

Da biste potvrdili ovo, izvršite sledeći isečak koda.

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

for num in nums:
  print(f"{num} daje ostatak {num%5} pri deljenju sa 5")

# Output
25 daje ostatak 0 pri deljenju sa 5
13 daje ostatak 3 pri deljenju sa 5
6 daje ostatak 1 pri deljenju sa 5
17 daje ostatak 2 pri deljenju sa 5
9 daje ostatak 4 pri deljenju sa 5

Broj 25 je deljiv sa 5 bez ostatka, pa je ostatak 0. Zato je on prvi element u sortiranoj listi. Broj 6 daje ostatak 1, pa je on drugi element, i tako dalje. Broj 9 daje ostatak 4 pri deljenju sa 5 i zato je poslednji u sortiranoj listi.

Umesto definisanja posebne funkcije, možete koristiti lambda funkcije. U Pythonu, lambda su anonimne funkcije u jednom redu. Oblik lambda args : izraz vraća rezultat izraza izračunatog na osnovu argumenata args.

Sada, prepisaćemo prethodno sortiranje koristeći lambda izraz, kao što je prikazano ispod.

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

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

Do sada ste naučili kako da sortirate listu brojeva. Sada da vidimo kako možete sortirati listu stringova u Pythonu.

Kako sortirati Python listu po abecednom redu

U ovom odeljku ćete naučiti kako da sortirate listu stringova—sa primerima inspirisanim Harijem Poterom. ✨

U našem primeru, studenti je lista učenika u Hogvortsu. Želimo da ih sortiramo po abecednom redu njihovih imena.

Kada sortirate listu stringova, podrazumevano sortiranje je po abecednom redu.

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

Hajde da ispišemo sortiranu listu da bismo proverili rezultat sortiranja.

students.sort()
print(students)

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

Kako sortirati Python listu obrnutim abecednim redom

Da biste sortirali listu obrnutim abecednim redom, postavite reverse = True, kao što je prikazano u isečku koda ispod.

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

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

Iz izlaza se vidi da je lista zaista sortirana u obrnutom abecednom redosledu.

Kako se koristi sortiranje za prilagođavanje ključnih parametara

U ovom odeljku, prilagodićemo sortiranje koristeći opcioni parametar key.

Razmotrite sledeću listu, kuce.

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

Ovde, kuce je lista rečnika. Svaki rečnik sadrži dva para ključ/vrednost, jedan koji označava imena učenika, a drugi kuću kojoj pripadaju.

Sada želimo da sortiramo ovu listu po abecednom redu kuća kojima učenici pripadaju.

Kao što ste do sada mogli da pretpostavite, potrebno je postaviti parametar key na kuću određenih učenika.

Da biste dobili kuću svakog učenika, možete definisati funkciju returnHouse(), kao što je prikazano ispod.

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

Ova funkcija vraća kuću kojoj određeni učenik pripada.

Sada možete pozvati metodu sort() na listi kuce, kao što je prikazano.

houses.sort(key=returnHouse)

U donjem rezultatu, obratite pažnju da je lista sortirana po kući, a ne po imenima učenika. Zato imamo Grifindor, Haflpaf i Sliterin—po abecednom redosledu.

print(houses)

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

Da biste definisali parametar key, možete koristiti i lambda funkciju. Za svaku stavku liste, ova funkcija vraća kuću za tu stavku liste.

▶ Pokrenite sledeći blok koda da biste to potvrdili.

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

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

U svim dosadašnjim primerima, koristili ste metodu sort() na listi. I sada znate da to menja originalnu listu.

Šta ako želite da sačuvate originalnu listu nepromenjenu, a dobijete sortiranu kopiju liste?

Pa, u Pythonu, možete koristiti funkciju sorted() da biste to uradili.

Sintaksa Python funkcije sorted()

Funkcija sorted() uzima listu ili bilo koju kolekciju kao argument. I vraća sortiranu kopiju liste—a originalna lista ostaje nepromenjena.

Sintaksa za Python funkciju sorted() je:

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

Primetićete da je sintaksa vrlo slična metodi sort() koju smo ranije videli.

  • <list> je bilo koji validan Python objekat liste i obavezan je parametar.
  • reverse i key su opcioni parametri.

Napomena: Za razliku od metode sort() koja radi samo na listama, funkcija sorted() se može koristiti za sortiranje bilo kog Python iterabilnog objekta, kao što su liste, stringovi i rečnici.

Kako sortirati Python listu koristeći funkciju sorted()

#1. U ovom primeru, nums je lista brojeva.

Možete pozvati funkciju sorted() sa nums kao argumentom. I dodeliti je listi sorted_nums1.

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

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

U izlazu iznad, možete videti da su brojevi sortirani u rastućem redosledu kao podrazumevano.

Takođe, primetite da originalna lista nums nije izmenjena—jer sorted() vraća novu listu. Ovo je potvrđeno u nastavku.

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

#2. Sada postavite opcioni parametar reverse na True i dobijte sorted_nums2.

Kao što je prikazano u bloku koda ispod, sorted_nums2 je nova lista sa stavkama sortiranim u opadajućem redosledu.

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

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

#3. U ovom primeru, radićemo sa listom stringova.

Kao i u prethodnim primerima, pozivanje funkcije sorted() vraća novu listu. I stavke su sortirane po abecednom redosledu.

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

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

#4. Sada, prilagodimo sortiranje pomoću opcionalnog parametra key. Postavite key na len. Ovo će sortirati listu na osnovu dužine stringova.

Napomena: U Pythonu, ugrađena funkcija len() uzima bilo koji iterabilni objekat, kao što su liste, stringovi, torke i tako dalje. I vraća dužinu iterabilnog objekta.

String sa najkraćom dužinom pojavljuje se prvi u sortiranoj listi, a najduži string se pojavljuje na kraju sortirane liste.

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

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

U izlazu iznad, ‘pear’ je najkraći string, a ‘strawberry’ najduži.

Python sort() metoda naspram funkcije sorted()

Do sada ste naučili kako da koristite metodu sort() kao i funkciju sorted(). U ovom delu, navešćemo razlike između ove dve metode.

Python .sort() metoda: Sortira listu na licu mesta—modifikuje originalnu listu. Radi samo sa Python listama. Nema povratni tip (None). Python sorted() funkcija: Vraća novu, sortiranu listu. Radi sa Python iterabilnim objektima, kao što su liste, stringovi i druge kolekcije. Vraća sortiranu kopiju.

Sumiranje 👩‍🏫

Nadam se da vam je ovaj vodič o Python listama bio koristan.

Hajde da brzo sumiramo ono što smo obradili.

  • Koristite lista.sort(reverse = True | False, key = <func>) sa opcionim parametrima reverse i key da sortirate listu na licu mesta.
  • Koristite sorted(lista, reverse = True | False, key = <func>) da biste dobili sortiranu kopiju liste.

Sada kada ste naučili kako da sortirate Python liste, saznajte više o razumevanju lista u Pythonu. Ili, takođe možete naučiti kako da rukujete datotekama ili radite sa JSON datotekama u Pythonu.

Možete isprobati gore navedene primere u online Python kompajleru.