Python имеет два вида сортировок: сортировка , метод (или "функция-член") и сортировка , функция .Метод sort работает с содержимым названного объекта - думайте о нем как о действии, которое объект предпринимает, чтобы переупорядочить себя .Функция сортировки представляет собой операцию над данными, представленными объектом , и возвращает новый объект с таким же содержимым в отсортированном порядке.
При заданном списке целых чисел с именем l
списоксам будет переупорядочен, если мы вызовем l.sort()
:
>>> l = [1, 5, 2341, 467, 213, 123]
>>> l.sort()
>>> l
[1, 5, 123, 213, 467, 2341]
Этот метод не имеет возвращаемого значения.Но что, если мы попытаемся присвоить результат l.sort()
?
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = l.sort()
>>> print(r)
None
r
, теперь фактически ничего не равно.Это одна из тех странных, несколько раздражающих деталей, о которых программист, вероятно, забудет после периода отсутствия в Python (именно поэтому я пишу это, поэтому I не забывайте снова).
Функция sorted()
, с другой стороны, не будет ничего делать с содержимым l
, но вернет новый отсортированный список с тем же содержимым, что и l
:
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = sorted(l)
>>> l
[1, 5, 2341, 467, 213, 123]
>>> r
[1, 5, 123, 213, 467, 2341]
Имейте в виду, что возвращаемое значение не a глубокое копирование , поэтому будьте осторожны с побочными эффектами над элементами, содержащимися в списке, как обычно:
>>> spam = [8, 2, 4, 7]
>>> eggs = [3, 1, 4, 5]
>>> l = [spam, eggs]
>>> r = sorted(l)
>>> l
[[8, 2, 4, 7], [3, 1, 4, 5]]
>>> r
[[3, 1, 4, 5], [8, 2, 4, 7]]
>>> spam.sort()
>>> eggs.sort()
>>> l
[[2, 4, 7, 8], [1, 3, 4, 5]]
>>> r
[[1, 3, 4, 5], [2, 4, 7, 8]]