Z tego artykułu dowiesz się, jak sortować listę w Pythonie.
W Pythonie możesz użyć sortować() metoda sortowania listy na miejscu. Lub możesz użyć wbudowanego posortowane() funkcja, 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ą kluczowego parametru
- Różnica między sort() a sorted()
Zacznijmy!👩🏽💻
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() Pythona to:
<list>.sort(reverse = True | False, key = <func>)
Przeanalizujmy teraz powyższą składnię.
to dowolny poprawny obiekt listy Pythona. - reverse to parametr, który przyjmuje prawdę lub fałsz.
- Domyślna wartość reverse to False, a lista jest sortowana w porządku rosnącym. Podaj True, aby posortować listę w kolejności malejącej.
- key jest również parametrem ustawionym na
. 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?
Zastanów się nad numerami listy. 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]
Numery list zostały posortowane w porządku rosnącym, a oryginalna lista została zmodyfikowana. To się nazywa sortowanie na miejscu.
Jak posortować listę Pythona w porządku malejącym?
Aby posortować listę w kolejności malejącej, ustaw odwrotność 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 klucza 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 klucza.
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 kluczem, 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. argumenty lambda : wyrażenie zwraca wyrażenie obliczone na argumenty.
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 uczniowie 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 klucza.
Rozważ poniższą listę, domy.
houses = [ {1:"Draco","house":"Slytherin"}, {2:"Harry","house":"Gryffindor"}, {3:"Cedric","house":"Hufflepuff"} ]
Tutaj domy 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ę domy w alfabetyczna kolejność domów oni należą do.
Jak można się domyślić do tej pory, powinniśmy ustawić kluczowy 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ć kluczowy 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.
jest dowolnym poprawnym obiektem listy Pythona i jest parametrem. - rewers i klucz są parametrami
Notatka: W przeciwieństwie do metody sort(), która działa tylko na listach, funkcja sorted() może być używana do sortowania dowolnego elementu iteracyjnego Pythona, takiego 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 liczbami 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 porządku malejącym.
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ą posortowane 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 klucza. Ustaw klucz na len. Spowoduje to posortowanie listy na podstawie długości ciągów.
Notatka: W Pythonie wbudowana funkcja len() przyjmuje dowolną iterację, taką jak listy, łańcuchy, 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 ciągiem i truskawka to najdłuższy ciąg.
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 Pythona .sort() | 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 Brak | 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.
- Posługiwać się list.sort(reverse = True | False, key =
) z opcjonalnym odwrócić oraz klucz parametry, aby posortować listę na miejscu. - Posługiwać się sorted(lista, reverse = True | False, key =
) aby otrzymać 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.