Metoda sort () sortuje elementy podanej listy w określonej kolejności rosnącej lub malejącej.
Składnia sort()
metody to:
list.sort (key =…, reverse =…)
Alternatywnie możesz również użyć wbudowanej funkcji sort () języka Python w tym samym celu.
posortowane (lista, klucz =…, do tyłu =…)
Uwaga: Najprostsza różnica między sort()
i sorted()
to: sort()
zmienia listę bezpośrednio i nie zwraca żadnej wartości, a jednocześnie sorted()
nie zmienia listy i zwraca posortowaną listę.
sort () Parametry
Domyślnie sort()
nie wymaga żadnych dodatkowych parametrów. Ma jednak dwa opcjonalne parametry:
- reverse - jeśli
True
posortowana lista jest odwrócona (lub posortowana w kolejności malejącej) - klucz - funkcja, która służy jako klucz do porównania sortowania
Wartość zwracana z sort ()
sort()
Metoda nie zwraca żadnej wartości. Raczej zmienia oryginalną listę.
Jeśli chcesz, aby funkcja zwracała posortowaną listę, zamiast zmieniać oryginalną listę, użyj sorted()
.
Przykład 1: Sortuj podaną listę
# vowels list vowels = ('e', 'a', 'u', 'o', 'i') # sort the vowels vowels.sort() # print vowels print('Sorted list:', vowels)
Wynik
Posortowana lista: („a”, „e”, „i”, „o”, „u”)
Sortuj w porządku malejącym
sort()
Sposób przyjmuje reverse
parametr jako opcjonalny argument.
Ustawienie reverse = True
sortuje listę w porządku malejącym.
list.sort(reverse=True)
Alternatywnie sorted()
, możesz użyć następującego kodu.
sorted(list, reverse=True)
Przykład 2: Sortuj listę w porządku malejącym
# vowels list vowels = ('e', 'a', 'u', 'o', 'i') # sort the vowels vowels.sort(reverse=True) # print vowels print('Sorted list (in Descending):', vowels)
Wynik
Lista posortowana (malejąco): ('u', 'o', 'i', 'e', 'a')
Sortuj według funkcji niestandardowej za pomocą klawisza
Jeśli chcesz mieć własną implementację do sortowania, sort()
metoda akceptuje również key
funkcję jako opcjonalny parametr.
Na podstawie wyników funkcji klucza można posortować podaną listę.
list.sort(key=len)
Alternatywnie do sortowania:
sorted(list, key=len)
Oto len
wbudowana funkcja Pythona do zliczania długości elementu.
Lista jest sortowana na podstawie długości każdego elementu, od najmniejszej liczby do największej.
Wiemy, że krotka jest domyślnie sortowana przy użyciu pierwszego parametru. Spójrzmy, jak dostosować sort()
metodę sortowania przy użyciu drugiego elementu.
Przykład 3: Sortuj listę za pomocą klucza
# take second element for sort def takeSecond(elem): return elem(1) # random list random = ((2, 2), (3, 4), (4, 1), (1, 3)) # sort list with key random.sort(key=takeSecond) # print list print('Sorted list:', random)
Wynik
Posortowana lista: ((4, 1), (2, 2), (1, 3), (3, 4))
Weźmy inny przykład. Załóżmy, że mamy listę informacji o pracownikach biura, gdzie każdy element jest słownikiem.
Listę możemy posortować w następujący sposób:
# sorting using custom key employees = ( ('Name': 'Alan Turing', 'age': 25, 'salary': 10000), ('Name': 'Sharon Lin', 'age': 30, 'salary': 8000), ('Name': 'John Hopkins', 'age': 18, 'salary': 1000), ('Name': 'Mikhail Tal', 'age': 40, 'salary': 15000), ) # custom functions to get employee info def get_name(employee): return employee.get('Name') def get_age(employee): return employee.get('age') def get_salary(employee): return employee.get('salary') # sort by name (Ascending order) employees.sort(key=get_name) print(employees, end='') # sort by Age (Ascending order) employees.sort(key=get_age) print(employees, end='') # sort by salary (Descending order) employees.sort(key=get_salary, reverse=True) print(employees, end='')
Wynik
(('Imię': 'Alan Turing', 'wiek': 25, 'wynagrodzenie': 10000), ('Imię': 'John Hopkins', 'wiek': 18, 'wynagrodzenie': 1000), ('Nazwisko ':' Michaił Tal ',' wiek ': 40,' wynagrodzenie ': 15000), (' Imię ':' Sharon Lin ',' wiek ': 30,' wynagrodzenie ': 8000)) ((' Imię ':' John Hopkins ',' wiek ': 18,' wynagrodzenie ': 1000), (' Imię ':' Alan Turing ',' wiek ': 25,' wynagrodzenie ': 10000), (' Imię ':' Sharon Lin ', 'wiek': 30, 'wynagrodzenie': 8000), ('Imię': 'Michaił Tal', 'wiek': 40, 'wynagrodzenie': 15000)) (('Imię': 'Michaił Tal', 'wiek' : 40, 'wynagrodzenie': 15000), ('Imię': 'Alan Turing', 'wiek': 25, 'wynagrodzenie': 10000), ('Imię ':' Sharon Lin ',' wiek ': 30,' wynagrodzenie ': 8000), (' Imię ':' John Hopkins ',' wiek ': 18,' wynagrodzenie ': 1000))
Tutaj, w pierwszym przypadku, nasza funkcja niestandardowa zwraca nazwisko każdego pracownika. Ponieważ nazwa to a string
, Python domyślnie sortuje ją w kolejności alfabetycznej.
W drugim przypadku funkcja age ( int
) jest zwracana i sortowana w kolejności rosnącej.
W trzecim przypadku funkcja zwraca wynagrodzenie ( int
) i jest sortowana malejąco za pomocą reverse = True
.
Dobrą praktyką jest używanie funkcji lambda, gdy funkcję można podsumować w jednym wierszu. Zatem możemy również napisać powyższy program jako:
# sorting using custom key employees = ( ('Name': 'Alan Turing', 'age': 25, 'salary': 10000), ('Name': 'Sharon Lin', 'age': 30, 'salary': 8000), ('Name': 'John Hopkins', 'age': 18, 'salary': 1000), ('Name': 'Mikhail Tal', 'age': 40, 'salary': 15000), ) # sort by name (Ascending order) employees.sort(key=lambda x: x.get('Name')) print(employees, end='') # sort by Age (Ascending order) employees.sort(key=lambda x: x.get('age')) print(employees, end='') # sort by salary (Descending order) employees.sort(key=lambda x: x.get('salary'), reverse=True) print(employees, end='')
Wynik
(('Imię': 'Alan Turing', 'wiek': 25, 'wynagrodzenie': 10000), ('Imię': 'John Hopkins', 'wiek': 18, 'wynagrodzenie': 1000), ('Nazwisko ':' Michaił Tal ',' wiek ': 40,' wynagrodzenie ': 15000), (' Imię ':' Sharon Lin ',' wiek ': 30,' wynagrodzenie ': 8000)) ((' Imię ':' John Hopkins ',' wiek ': 18,' wynagrodzenie ': 1000), (' Imię ':' Alan Turing ',' wiek ': 25,' wynagrodzenie ': 10000), (' Imię ':' Sharon Lin ', 'wiek': 30, 'wynagrodzenie': 8000), ('Imię': 'Michaił Tal', 'wiek': 40, 'wynagrodzenie': 15000)) (('Imię': 'Michaił Tal', 'wiek' : 40, 'wynagrodzenie': 15000), ('Imię': 'Alan Turing', 'wiek': 25, 'wynagrodzenie': 10000), ('Imię ':' Sharon Lin ',' wiek ': 30,' wynagrodzenie ': 8000), (' Imię ':' John Hopkins ',' wiek ': 18,' wynagrodzenie ': 1000))
Aby dowiedzieć się więcej o funkcjach lambda, odwiedź stronę Python Lambda Functions.