Jak sortować listy w Pythonie

Opublikowany: 2022-03-30

Z 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 funkcji sorted()
  • Przykłady kodu sortowania list w kolejności rosnącej i malejącej
  • Dostosuj sortowanie za pomocą key parametru
  • Różnica między sort() a sorted()

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 jest False , a lista jest sortowana w porządku rosnącym. Podaj True , 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.

python-sortuj-lista

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 i key są parametrami opcjonalnymi

Uwaga : W przeciwieństwie do metody sort() , która działa tylko na listach, funkcja sorted() 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.