В Python sorted() и sort() — это две разные функции (точнее, sort() — это метод списка), используемые для сортировки элементов, но у них есть ключевые различия:
Тип: sorted() является Встроенной функцией, а sort() является Методом списка. Возвращаемое значение:
- sorted() Возвращает новый отсортированный список, оставляя исходный итерируемый объект без изменений. sort() Сортирует список на месте (in-place), то есть изменяет исходный список и Возвращает None.
Применимость:
- sorted() может быть использована с Любым итерируемым объектом (списки, кортежи, строки, множества, словари и т. д.). Она всегда возвращает список. sort() может быть вызвана Только на объектах типа List (список).
Давайте рассмотрим примеры:
Sorted()
Python
# Пример с list
My_list = [3, 1, 4, 1, 5, 9, 2]
Sorted_list = sorted(my_list)
Print(f"Исходный список: {my_list}") # Вывод: Исходный список: [3, 1, 4, 1, 5, 9, 2]
Print(f"Отсортированный список (sorted): {sorted_list}") # Вывод: Отсортированный список (sorted): [1, 1, 2, 3, 4, 5, 9]
# Пример с tuple
My_tuple = (3, 1, 4, 1, 5)
Sorted_tuple_as_list = sorted(my_tuple)
Print(f"Исходный кортеж: {my_tuple}")
Print(f"Отсортированный кортеж (как список): {sorted_tuple_as_list}")
# Вывод: Отсортированный кортеж (как список): [1, 1, 3, 4, 5]
# Пример со string
My_string = "python"
Sorted_string_as_list = sorted(my_string)
Print(f"Исходная строка: {my_string}")
Print(f"Отсортированная строка (как список символов): {sorted_string_as_list}")
# Вывод: Отсортированная строка (как список символов): [‘h’, ‘n’, ‘o’, ‘p’, ‘t’, ‘y’]
# Пример с set
My_set = {3, 1, 4, 2}
Sorted_set_as_list = sorted(my_set)
Print(f"Исходное множество: {my_set}")
Print(f"Отсортированное множество (как список): {sorted_set_as_list}")
# Вывод: Отсортированное множество (как список): [1, 2, 3, 4]
# Пример с dictionary (сортирует по ключам)
My_dict = {‘b’: 2, ‘a’: 1, ‘c’: 3}
Sorted_dict_keys = sorted(my_dict)
Print(f"Исходный словарь: {my_dict}")
Print(f"Отсортированные ключи словаря: {sorted_dict_keys}")
# Вывод: Отсортированные ключи словаря: [‘a’, ‘b’, ‘c’]
Sort()
Python
My_list = [3, 1, 4, 1, 5, 9, 2]
Print(f"Исходный список до sort(): {my_list}") # Вывод: Исходный список до sort(): [3, 1, 4, 1, 5, 9, 2]
Result_of_sort = my_list. sort() # Сортирует список на месте
Print(f"Список после sort(): {my_list}") # Вывод: Список после sort(): [1, 1, 2, 3, 4, 5, 9]
Print(f"Результат вызова sort(): {result_of_sort}") # Вывод: Результат вызова sort(): None
Важное замечание: Поскольку list. sort() возвращает None, Никогда не делайте так:
Python
# НЕПРАВИЛЬНО!
My_list = [3, 1, 2]
My_list = my_list. sort() # my_list станет None
Print(my_list) # Вывод: None
Общие Аргументы (Key И Reverse)
Обе функции, sorted() и sort(), принимают два необязательных аргумента:
- Key: Функция, которая будет вызвана для каждого элемента итерируемого объекта перед сравнением. Возвращаемое значение этой функции используется для сортировки. Reverse: Логическое значение (True или False). Если True, список будет отсортирован в порядке убывания (от большего к меньшему). По умолчанию False (сортировка по возрастанию).
Python
Words = ["banana", "apple", "cherry", "date"]
# Сортировка по длине слова
Sorted_by_length = sorted(words, key=len)
Print(f"По длине (sorted): {sorted_by_length}")
# Вывод: По длине (sorted): [‘date’, ‘apple’, ‘banana’, ‘cherry’]
# Сортировка в обратном алфавитном порядке
Words. sort(reverse=True)
Print(f"Обратный алфавитный (sort): {words}")
# Вывод: Обратный алфавитный (sort): [‘date’, ‘cherry’, ‘banana’, ‘apple’]
# Сортировка списка словарей по значению ключа ‘age’
People = [
{‘name’: ‘Alice’, ‘age’: 30},
{‘name’: ‘Bob’, ‘age’: 25},
{‘name’: ‘Charlie’, ‘age’: 35}
]
# Сортировка по возрасту
Sorted_by_age = sorted(people, key=lambda person: person[‘age’])
Print(f"По возрасту (sorted): {sorted_by_age}")
# Вывод: По возрасту (sorted): [{‘name’: ‘Bob’, ‘age’: 25}, {‘name’: ‘Alice’, ‘age’: 30}, {‘name’: ‘Charlie’, ‘age’: 35}]
Когда что использовать?
- Используйте Sorted(), когда:
- Вам нужен Новый отсортированный список, а исходный итерируемый объект должен остаться неизменным. Вам нужно отсортировать Любой итерируемый объект, не только список (например, кортеж, строку, множество, словарь).
Используйте List. sort(), когда:
- Вы работаете со Списком. Вам не нужна копия, и вы хотите Изменить список на месте, чтобы сэкономить память или улучшить производительность для очень больших списков, где создание копии было бы нежелательно.
В большинстве случаев, если вы не уверены или вам просто нужна отсортированная версия, sorted() является более безопасным и гибким выбором.