Функция sorted()
и метод sort()
в Python делают по сути одно и тоже - сортируют, их главное отличие, это то, что sort()
применим только к спискам, а функция sorted()
применяется к любому итерируемому объекту: множеству, кортежу, словарю, строке и т.д.
Синтаксис sort():
list.sort(self, key=None, reverse=False)
Аргументы:
- Применяется метод к списку, т.е список передает сам себя (
self
). - В
key
мы можем передать пользовательскую функцию для сортировки. - Флаг
reverse
позволяет вывести результат в обратном порядке.
Синтаксис sorted():
sorted(iterable, /, *, key=None, reverse=False)
Аргументы:
iterable
- передаем итерируемый объект.- В
key
мы можем передать пользовательскую функцию для сортировки. - Флаг
reverse
позволяет вывести результат в обратном порядке.
Рассмотрим примеры для sort():
# Неупорядоченный список
nums_list = [2, 3, 1, 5, 4, 7, 6]
# Упорядоченный список
nums_list.sort()
# Выводим список
print(nums_list)
# Список в обратную сторону
nums_list.sort(reverse=True)
# Выводим список
print(nums_list)
# Своя функция сортировки
def func_sort(x):
return x % 2
# Применяем функцию к сортировке
nums_list.sort(key=func_sort)
# Выводим список
print(nums_list)
Результаты:
[1, 2, 3, 4, 5, 6, 7]
[7, 6, 5, 4, 3, 2, 1]
[6, 4, 2, 7, 5, 3, 1]
В этом примере мы рассмотрели как использовать sort()
, reverse
и key
.
Рассмотрим примеры для sorted():
# Неупорядоченный кортеж
numbers_tuple = (1, 4, 3, 2)
# Неупорядоченное множество
numbers_set = {5, 5, 4, 3, 1, 2, 3, 0}
# Сортируем кортеж
numbers_tuple_sorted = sorted(numbers_tuple)
# Сортируем множество
numbers_set_sorted = sorted(numbers_set)
# Выводим информацию
print(numbers_tuple_sorted, numbers_set_sorted)
Результаты:
>>> [1, 2, 3, 4]
>>> [0, 1, 2, 3, 4, 5]
Примечание: не забываем, что множество сохраняет лишь уникальные значения, поэтому повторяющиеся значения удалились.
Пример со строками:
# Строка из чисел
string_number_value = '96312457'
# Строковое значение
string_value = 'Я люблю сортировку!'
# Сортируем строковые числа
sorted_string_number = sorted(string_number_value)
# Сортируем строковое значение
sorted_string = sorted(string_value)
# Выводим информацию
print(sorted_string_number, sorted_string)
Результат:
>>> ['1', '2', '3', '4', '5', '6', '7', '9']
>>> [' ', ' ', '!', 'Я', 'б', 'в', 'и', 'к', 'л', 'л', 'о', 'о', 'р', 'р', 'с', 'т', 'у', 'ю', 'ю']
Сортировка с применением lambda функции:
Хотим узнать по возрастанию цены на фрукты
fruit = {
('Апельсины', 75),
('Мандарины', 50),
('Ананасы', 120),
('Бананы', 70)
}
sorted_fruit = sorted(fruit, key=lambda x: x[1])
print(sorted_fruit)
Результат:
[('Мандарины', 50), ('Бананы', 70), ('Апельсины', 75), ('Ананасы', 120)]
А если по убыванию, добавим -:
fruit = {
('Апельсины', 75),
('Мандарины', 50),
('Ананасы', 120),
('Бананы', 70)
}
sorted_fruit = sorted(fruit, key=lambda x: -x[1])
print(sorted_fruit)
Результат:
[('Ананасы', 120), ('Апельсины', 75), ('Бананы', 70), ('Мандарины', 50)]