Jak sortować listy w Pythonie

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ą 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 opcjonalny 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ż opcjonalnym 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. Nazywa się to sortowaniem 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ć osobną funkcję, równie dobrze możesz użyć funkcje lambda. W Pythonie lambdy są jednowierszowymi funkcjami anonimowymi. lambda args : wyrażenie zwraca wyrażenie obliczone na argumentach.

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ę domów w kolejności alfabetycznej domów, do których należą.

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.

  • to dowolny poprawny obiekt listy Pythona i jest wymaganym parametrem.
  • rewers i klucz 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 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.

Uwaga: W Pythonie wbudowana funkcja len() przyjmuje wszystkie elementy iterowalne, takie 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 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.

Python .sort() MethodPython sorted() FunctionSortuje listę w miejscu — modyfikuje oryginalną listęZwraca nową posortowaną listęPracuje tylko z listami PythonaDziała z iterowalnymi elementami Pythona, takimi jak listy, ciągi znaków i inne kolekcje.Zwraca typ NoneZwraca posortowaną kopię elementu iteracyjnego

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 = ) z opcjonalnymi parametrami reverse i key, aby posortować listę w miejscu.
  • Użyj sorted(list, reverse = True | False, key = ), 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 newsblog.pl Online Python.