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 funkcijesorted()
. - Primere kodiranja sortiranja lista u rastućem i opadajućem redosledu.
- Prilagođavanje sortiranja upotrebom parametra
key
. - Razliku između
sort()
isorted()
.
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 vrednostTrue
iliFalse
.- Podrazumevana vrednost za
reverse
jeFalse
, što znači da će lista biti sortirana u rastućem redosledu. Postavite naTrue
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
ikey
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 parametrimareverse
ikey
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.