Ответ
Основное отличие заключается в том, что list.sort() — это метод, изменяющий исходный список (in-place), а sorted() — встроенная функция, возвращающая новый отсортированный список.
1. list.sort() (in-place сортировка):
- Изменяет исходный список. После вызова
my_list.sort()порядок элементов вmy_listменяется. - Возвращает
None. Это важный момент, который может привести к ошибкам, если ожидается возврат списка. - Применим только к спискам (list).
2. sorted() (функция, создающая новую последовательность):
- Не изменяет исходную коллекцию. Возвращает новый отсортированный список.
- Работает с любым итерируемым объектом: списки, кортежи, строки, словари (вернёт список ключей), генераторы.
- Всегда возвращает список (
list). Даже если на входе был кортеж или строка.
Примеры:
# Исходные данные
my_list = [3, 1, 4, 1, 5]
my_tuple = (9, 2, 6)
my_string = "python"
# Использование list.sort()
my_list.sort()
print(my_list) # Вывод: [1, 1, 3, 4, 5]
# Метод sort() ничего не возвращает (None)
result = my_list.sort()
print(result) # Вывод: None
# Использование sorted()
sorted_list = sorted(my_list) # Создаёт новый список
print(sorted_list) # Вывод: [1, 1, 3, 4, 5]
print(my_list) # Исходный список не изменился: [1, 1, 3, 4, 5]
sorted_tuple = sorted(my_tuple) # Возвращает список!
print(sorted_tuple) # Вывод: [2, 6, 9]
print(type(sorted_tuple)) # Вывод: <class 'list'>
sorted_chars = sorted(my_string)
print(sorted_chars) # Вывод: ['h', 'n', 'o', 'p', 't', 'y']
Общие параметры (и для sort(), и для sorted()):
key: Функция, определяющая ключ сортировки (например,key=lenдля сортировки по длине).reverse: Булев флаг для сортировки по убыванию (reverse=True).
# Сортировка списка строк по длине
words = ['apple', 'fig', 'banana', 'date']
sorted_by_len = sorted(words, key=len)
print(sorted_by_len) # Вывод: ['fig', 'date', 'apple', 'banana']
words.sort(key=len, reverse=True)
print(words) # Вывод: ['banana', 'apple', 'date', 'fig'] (исходный список изменён)
Практическое правило: Использую sorted(), когда нужно сохранить исходный порядок данных или отсортировать не-список. Использую list.sort(), когда нужно эффективно отсортировать именно список и исходный порядок не важен.