Методът sort () сортира елементите на даден списък в определен възходящ или низходящ ред.
Синтаксисът на sort()
метода е:
list.sort (ключ = …, обратно = …)
Като алтернатива можете също да използвате вградената в Python функция sorted () за същата цел.
сортирано (списък, ключ = …, обратно = …)
Забележка: Най-простата разлика между sort()
и sorted()
е: sort()
променя директно списъка и не връща никаква стойност, докато sorted()
не променя списъка и връща сортирания списък.
сортиране () Параметри
По подразбиране sort()
не изисква допълнителни параметри. Той обаче има два незадължителни параметъра:
- обратен - Ако
True
сортираният списък е обърнат (или сортиран в низходящ ред) - ключ - функция, която служи като ключ за сравнение на сортирането
Връщане на стойност от sort ()
В sort()
метода не връща никаква стойност. По-скоро променя първоначалния списък.
Ако искате функция да връща сортирания списък, вместо да променя оригиналния списък, използвайте sorted()
.
Пример 1: Сортиране на даден списък
# vowels list vowels = ('e', 'a', 'u', 'o', 'i') # sort the vowels vowels.sort() # print vowels print('Sorted list:', vowels)
Изход
Сортиран списък: ('a', 'e', 'i', 'o', 'u')
Сортиране в низходящ ред
В sort()
метода приема reverse
параметър като незадължителен аргумент.
Настройката reverse = True
сортира списъка в низходящ ред.
list.sort(reverse=True)
Алтернативно за sorted()
, можете да използвате следния код.
sorted(list, reverse=True)
Пример 2: Сортирайте списъка в низходящ ред
# vowels list vowels = ('e', 'a', 'u', 'o', 'i') # sort the vowels vowels.sort(reverse=True) # print vowels print('Sorted list (in Descending):', vowels)
Изход
Сортиран списък (в низходящ): ('u', 'o', 'i', 'e', 'a')
Сортирайте с персонализирана функция с помощта на ключ
Ако искате собствена реализация за сортиране, sort()
методът също така приема key
функция като незадължителен параметър.
Въз основа на резултатите от ключовата функция можете да сортирате дадения списък.
list.sort(key=len)
Алтернативно за сортирано:
sorted(list, key=len)
Тук len
е вградената функция на Python за отчитане дължината на елемент.
Списъкът е сортиран въз основа на дължината на всеки елемент, от най-ниския брой до най-големия.
Знаем, че кортежът е сортиран, като се използва първият параметър по подразбиране. Нека разгледаме как да персонализираме sort()
метода за сортиране с помощта на втория елемент.
Пример 3: Сортирайте списъка с помощта на ключ
# 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)
Изход
Сортиран списък: ((4, 1), (2, 2), (1, 3), (3, 4))
Да вземем друг пример. Да предположим, че имаме списък с информация за служителите на офис, където всеки елемент е речник.
Можем да сортираме списъка по следния начин:
# 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='')
Изход
((„Име“: „Алън Тюринг“, „възраст“: 25, „заплата“: 10000), („Име“: „Джон Хопкинс“, „възраст“: 18, „заплата“: 1000), („Име ':' Михаил Тал ',' възраст ': 40,' заплата ': 15000), (' Име ':' Шарън Лин ',' възраст ': 30,' заплата ': 8000)) ((' Име ':' Джон Хопкинс "," възраст ": 18," заплата ": 1000), (" Име ":" Алън Тюринг "," възраст ": 25," заплата ": 10000), (" Име ":" Шарън Лин ", "възраст": 30, "заплата": 8000), ("Име": "Михаил Тал", "възраст": 40, "заплата": 15000)) (("Име": "Михаил Тал", "възраст" : 40, „заплата“: 15000), („Име“: „Алън Тюринг“, „възраст“: 25, „заплата“: 10000), („Име ':' Шарън Лин ',' възраст ': 30,' заплата ': 8000), (' Име ':' Джон Хопкинс ',' възраст ': 18,' заплата ': 1000))
Тук, за първия случай, нашата персонализирана функция връща името на всеки служител. Тъй като името е a string
, Python по подразбиране го сортира, използвайки азбучния ред.
За втория случай възрастта ( int
) се връща и се сортира във възходящ ред.
За третия случай функцията връща заплатата ( int
) и се сортира в низходящ ред, като се използва reverse = True
.
Добра практика е да използвате функцията ламбда, когато функцията може да бъде обобщена в един ред. Така че, можем също да напишем горната програма като:
# 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='')
Изход
((„Име“: „Алън Тюринг“, „възраст“: 25, „заплата“: 10000), („Име“: „Джон Хопкинс“, „възраст“: 18, „заплата“: 1000), („Име ':' Михаил Тал ',' възраст ': 40,' заплата ': 15000), (' Име ':' Шарън Лин ',' възраст ': 30,' заплата ': 8000)) ((' Име ':' Джон Хопкинс "," възраст ": 18," заплата ": 1000), (" Име ":" Алън Тюринг "," възраст ": 25," заплата ": 10000), (" Име ":" Шарън Лин ", "възраст": 30, "заплата": 8000), ("Име": "Михаил Тал", "възраст": 40, "заплата": 15000)) (("Име": "Михаил Тал", "възраст" : 40, „заплата“: 15000), („Име“: „Алън Тюринг“, „възраст“: 25, „заплата“: 10000), („Име ':' Шарън Лин ',' възраст ': 30,' заплата ': 8000), (' Име ':' Джон Хопкинс ',' възраст ': 18,' заплата ': 1000))
За да научите повече за ламбда функциите, посетете Python Lambda Functions.