Jak sortować listy w Pythonie
Opublikowany: 2022-03-30Z tego artykułu dowiesz się, jak sortować listę w Pythonie.
W Pythonie możesz użyć metody sort() do sortowania listy w miejscu. Możesz też użyć wbudowanej funkcji sorted() , aby uzyskać posortowaną kopię listy.
W tym samouczku dowiesz się:
- Składnia metody
sort()
i funkcjisorted()
- Przykłady kodu sortowania list w kolejności rosnącej i malejącej
- Dostosuj sortowanie za pomocą
key
parametru - Różnica między
sort()
asorted()
Zaczynajmy!
Składnia metody sort() w Pythonie
Metoda sort()
działa na liście Pythona. I sortuje listę w miejscu — i modyfikuje oryginalną listę.
Składnia metody sort()
w Pythonie to:
<list>.sort(reverse = True | False, key = <func>)
Przeanalizujmy teraz powyższą składnię.
-
<list>
to dowolny poprawny obiekt listy Pythona. -
reverse
to opcjonalny parametr, który przyjmuje prawdę lub fałsz. - Domyślną wartością
reverse
jestFalse
, a lista jest sortowana w porządku rosnącym. PodajTrue
, aby posortować listę w kolejności malejącej. -
key
jest również opcjonalnym parametrem ustawionym na<func>
. -
<func>
może być funkcją wbudowaną lub funkcją zdefiniowaną przez użytkownika.
W następnej sekcji zaczniesz kodować proste przykłady.
Jak posortować listę Pythona w porządku rosnącym?
Rozważmy listę nums
. Aby posortować listę w porządku rosnącym, możesz wywołać na liście metodę sort()
.
Uruchom następujący fragment kodu.
nums = [25,13,6,17,9] nums.sort() print(nums) # Output: [6, 9, 13, 17, 25]
nums
list zostały posortowane w porządku rosnącym, a oryginalna lista została zmodyfikowana. Nazywa się to sortowaniem w miejscu .
Jak posortować listę Pythona w porządku malejącym?
Aby posortować listę w kolejności malejącej, ustaw reverse
na True
, jak pokazano poniżej.
nums = [25,13,6,17,9] nums.sort(reverse = True) print(nums) # Output: [25, 17, 13, 9, 6]
Możesz zobaczyć, że lista jest teraz posortowana w porządku malejącym.
Jak używać klucza z metodą sort() w Pythonie
W tej sekcji użyjmy parametru key
i dostosujmy sortowanie.
Tutaj mod5()
jest funkcją, która przyjmuje liczbę x
i zwraca resztę z dzielenia liczby x
przez 5.
def mod5(x): return x % 5
I chcielibyśmy użyć powyższej funkcji jako key
.
Teraz uruchom następującą komórkę kodu.
nums = [25,13,6,17,9] nums.sort(key = mod5) print(nums) # Output: [25, 6, 17, 13, 9]
Poświęć chwilę na przeanalizowanie danych wyjściowych.
Zauważ, że zamiast zwykłego sortowania dostosowujesz teraz sortowanie zgodnie z key
którym jest mod5
.
- Liczba, która pozostawia minimalną resztę po podzieleniu przez 5, jest teraz pierwsza.
- A liczba, która pozostawia największą resztę po podzieleniu przez 5, jest ostatnim elementem na posortowanej liście.
Aby to sprawdzić, uruchom następujący fragment kodu.
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 dzieli dokładnie 25, a reszta to 0. To jest pierwszy element na posortowanej liście. 6 pozostawia resztę 1, więc jest to drugi element i tak dalej. 9 pozostawia resztę 4 po podzieleniu przez 5 i jest to ostatni element na posortowanej liście.
Zamiast definiować oddzielną funkcję, równie dobrze możesz użyć funkcji lambda. W Pythonie lambdy są jednowierszowymi funkcjami anonimowymi. lambda args : wyrażenie zwraca wyrażenie obliczone na args .
Teraz przepiszmy powyższe sortowanie za pomocą wyrażenia lambda, jak pokazano poniżej.
nums = [25,13,6,17,9] nums.sort(key = lambda x:x%5) print(nums) # Output: [25, 6, 17, 13, 9]
Do tej pory nauczyłeś się sortować listę liczb. Następnie zobaczmy, jak możesz posortować listę ciągów w Pythonie.
Jak posortować listę Pythona w kolejności alfabetycznej?
W tej sekcji nauczysz się sortować listę ciągów — z przykładami inspirowanymi Harrym Potterem.
W naszym przykładzie students
to lista uczniów w Hogwarcie. I chcielibyśmy je posortować w porządku alfabetycznym ich nazw.
Podczas sortowania listy ciągów domyślne sortowanie odbywa się w kolejności alfabetycznej.
students = ["Harry","Ron","Hermione","Draco","Cedric"]
Wydrukujmy posortowaną listę, aby zweryfikować wynik sortowania.
students.sort() print(students) # Output ['Cedric','Draco', 'Harry', 'Hermione', 'Ron']
Jak posortować listę Pythona w odwrotnej kolejności alfabetycznej?
Aby posortować listę w odwrotnej kolejności alfabetycznej, ustaw reverse
= True
, jak pokazano na poniższym fragmencie kodu.
students.sort(reverse = True) print(students) # Output ['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']
Z danych wyjściowych widać, że lista rzeczywiście została posortowana w odwrotnej kolejności.
Jak używać kluczowego parametru Dostosuj sortowanie
W tej sekcji dostosujmy sortowanie za pomocą opcjonalnego parametru key
.
Rozważ poniższą listę, houses
.
houses = [ {1:"Draco","house":"Slytherin"}, {2:"Harry","house":"Gryffindor"}, {3:"Cedric","house":"Hufflepuff"} ]
Tutaj houses
to lista słowników. Każdy słownik zawiera dwie pary klucz-wartość, jedną oznaczającą nazwiska uczniów, a drugą dom, do którego należą.
Teraz chcielibyśmy posortować tę listę domów w kolejności alfabetycznej domów , do których należą.
Jak można się domyślić do tej pory, powinniśmy ustawić key
parametr na dom poszczególnych uczniów.
Aby pobrać dom każdego ucznia, możesz zdefiniować funkcję returnHouse()
, jak pokazano poniżej.
def returnHouse(student): return student['house']
Ta funkcja zwraca dom, do którego należy dany uczeń.
Teraz możesz wywołać metodę sort()
na liście domów, jak pokazano.
houses.sort(key=returnHouse)
W poniższym wyniku zwróć uwagę, jak lista jest posortowana według domów, a nie nazwisk uczniów. Dlatego mamy Gryffindor, Hufflepuff i Slytherin – w porządku alfabetycznym.
print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}]
Aby odpowiednio zdefiniować key
parametr, możesz również użyć funkcji lambda. Dla każdego elementu listy ta funkcja zwraca dom dla tego elementu listy.
Uruchom następującą komórkę kodu, aby to sprawdzić.
houses.sort(key=lambda student:student["house"]) print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}]
We wszystkich dotychczasowych przykładach użyłeś metody sort()
na liście. A teraz wiesz, że modyfikuje oryginalną listę.
Co zrobić, jeśli chcesz zachować oryginalną listę bez zmian, ale uzyskać posortowaną kopię listy?
Cóż, w Pythonie możesz użyć do tego funkcji sorted()
.
Składnia funkcji sorted() w Pythonie
Funkcja sorted()
przyjmuje jako argument listę lub dowolną kolekcję. Zwraca posortowaną kopię listy — a oryginalna lista nie jest modyfikowana.
Składnia funkcji sorted()
Pythona to:
<sorted_copy> = sorted(<list>, reverse = True | False, key = <func>)
Zauważ, że składnia jest bardzo podobna do metody sort()
, którą widzieliśmy wcześniej.
-
<list>
to dowolny poprawny obiekt listy Pythona i jest wymaganym parametrem. -
reverse
ikey
są parametrami opcjonalnymi
Uwaga : W przeciwieństwie do metody
sort()
, która działa tylko na listach, funkcjasorted()
może być używana do sortowania dowolnych iterowalnych elementów Pythona, takich jak listy, ciągi znaków i słowniki.
Jak posortować listę Pythona za pomocą funkcji sorted()?
#1. W tym przykładzie nums
to lista liczb.
Możesz wywołać funkcję sorted()
z nums
jako argumentem. I przypisz go do listy sorted_nums1
.
nums = [25,13,6,17,9] sorted_nums1 = sorted(nums) print(sorted_nums1) # Output: [6, 9, 13, 17, 25]
Na powyższym wyjściu widać, że nums
zostało domyślnie posortowane w kolejności rosnącej.
Zauważ też, że oryginalna lista nums
nie jest modyfikowana — ponieważ sorted()
zwraca nową listę. Zostało to zweryfikowane poniżej.
print(nums) # Output: [25, 13, 6, 17, 9]
#2 . Teraz ustaw opcjonalny parametr reverse
na True
i uzyskaj sorted_nums2
.
Jak pokazano w komórce kodu poniżej, sorted_nums2
to nowa lista z elementami posortowanymi w kolejności malejącej.
sorted_nums2 = sorted(nums,reverse = True) print(sorted_nums2) # Output: [25, 17, 13, 9, 6]
#3. W tym przykładzie popracujmy z listą ciągów.
Podobnie jak w poprzednich przykładach, wywołanie funkcji sorted()
zwraca nową listę. A pozycje są sortowane w kolejności alfabetycznej.
fruits = ['pears','strawberry','apple','pineapple','blueberry'] sorted_fr1 = sorted(fruits) print(sorted_fr1) # Output: ['apple', 'blueberry', 'pears', 'pineapple', 'strawberry']
#4. Teraz dostosujmy sortowanie za pomocą opcjonalnego parametru key
. Ustaw key
na len
. Spowoduje to posortowanie listy na podstawie długości ciągów.
Uwaga: W Pythonie wbudowana funkcja
len()
przyjmuje wszystkie elementy iterowalne, takie jak listy, ciągi, krotki i tak dalej. I zwraca długość elementu iteracyjnego.
Ciąg o najkrótszej długości pojawia się jako pierwszy na posortowanej liście, a najdłuższy ciąg pojawia się na końcu posortowanej listy.
fruits = ['pear','strawberry','apple','pineapple','blueberry'] sorted_fr2 = sorted(fruits,key=len) print(sorted_fr2) # Output: ['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']
W powyższym wyniku gruszka jest najkrótszym sznurkiem, a truskawka jest najdłuższym.
Python metoda sort() a funkcja sorted()
Do tej pory nauczyłeś się używać metody sort()
oraz funkcji sorted()
. W tej sekcji wymieńmy różnice między tymi dwiema metodami.
Metoda .sort() w Pythonie | Funkcja sortowania() w Pythonie |
Sortuje listę w miejscu — modyfikuje oryginalną listę | Zwraca nową posortowaną listę |
Działa tylko z listami Pythona | Działa z iterowalnymi elementami Pythona, takimi jak listy, ciągi znaków i inne kolekcje |
Ma typ zwrotu None | Zwraca posortowaną kopię iterowalnego |
Podsumowując
Mam nadzieję, że ten poradnik dotyczący list Pythona okazał się pomocny.
Podsumujmy szybko to, co omówiliśmy.
- Użyj list.sort(reverse = True | False, key = <func>) z opcjonalnymi parametrami reverse i key , aby posortować listę w miejscu.
- Użyj sorted(list, reverse = True | False, key = <func>) , aby uzyskać posortowaną kopię listy.
Teraz, gdy nauczyłeś się sortować listy w Pythonie, dowiedz się, jak rozumieć listy w Pythonie. Możesz też nauczyć się obsługiwać pliki lub pracować z plikami JSON w Pythonie.
Możesz wypróbować przykłady podane powyżej w kompilatorze Geekflare Online Python.