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ą
keyparametru - 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. -
reverseto opcjonalny parametr, który przyjmuje prawdę lub fałsz. - Domyślną wartością
reversejestFalse, a lista jest sortowana w porządku rosnącym. PodajTrue, aby posortować listę w kolejności malejącej. -
keyjest 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 55 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. -
reverseikeysą 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.
