Встроенная сортировка

В Python есть метод sort для списков.


In [4]:
a = [5, 3, -2, 9, 1]

# Метод sort меняет существующий список
a.sort()
print(a)


[-2, 1, 3, 5, 9]

Сортировка в обратном порядке

Для сортировки в обратном порядке можно указать параметр reverse.


In [3]:
a = [5, 3, -2, 9, 1]
a.sort(reverse=True)
print(a)


[9, 5, 3, 1, -2]

Сортировка по ключу

Сортировка по ключу позволяет отсортировать список не по значению самого элемента, а по чему-то другому.


In [15]:
# Обычно строки сортируются в алфавитном порядке
a = ["bee", "all", "accessibility", "zen", "treasure"]
a.sort()
print(a)


['accessibility', 'all', 'bee', 'treasure', 'zen']

In [16]:
# А используя сортировку по ключу можно сортировать, например, по длине
a = ["bee", "all", "accessibility", "zen", "treasure"]
a.sort(key=len)
print(a)


['bee', 'all', 'zen', 'treasure', 'accessibility']

В качестве параметра key можно указывать не только встроенные функции, но и самостоятельно определённые. Такая функция должна принимать один аргумент, элемент списка, и возращать значение, по которому надо сортировать.


In [13]:
# Сортируем по остатку от деления на 10
def mod(x):
    return x % 10

a = [1, 15, 143, 8, 0, 5, 17, 48]
a.sort(key=mod)
print(a)


[0, 1, 143, 15, 5, 17, 8, 48]

In [18]:
# Обычно списки сортируются сначала по первому элементу, потом по второму и так далее
a = [[4, 3], [1, 5], [2, 15], [1, 6], [2, 9], [4, 1]]
a.sort()
print(a)

# А так можно отсортировать сначала по первому по возрастанию, а при равенсте — по втором
def my_key(x):
    return x[0], -x[1]

a = [[4, 3], [1, 5], [2, 15], [1, 6], [2, 9], [4, 1]]
a.sort(key=my_key)
print(a)


[[1, 5], [1, 6], [2, 9], [2, 15], [4, 1], [4, 3]]
[[1, 6], [1, 5], [2, 15], [2, 9], [4, 3], [4, 1]]