Как сортировать списки в Python
Опубликовано: 2022-03-30Эта статья научит вас сортировать список в Python.
В Python вы можете использовать метод sort() для сортировки списка на месте. Или вы можете использовать встроенную функцию sorted() , чтобы получить отсортированную копию списка.
В этом уроке вы узнаете:
- Синтаксис метода
sort()и функцииsorted() - Примеры кода сортировки списков по возрастанию и убыванию
- Настроить сортировку по
keyпараметру - Разница между
sort()иsorted()
Давайте начнем!
Синтаксис метода Python sort()
Метод sort() работает со списком Python. И он сортирует список на месте — и изменяет исходный список.
Синтаксис метода Python sort() :
<list>.sort(reverse = True | False, key = <func>)Давайте теперь разберем приведенный выше синтаксис.
-
<list>— любой допустимый объект списка Python. -
reverse— необязательный параметр, который принимает значение True или False. - Значение
reverseпо умолчанию —False, и список отсортирован в порядке возрастания. ДайтеTrue, чтобы отсортировать список в порядке убывания. -
keyтакже является необязательным параметром, для которого задано значение<func>. -
<func>может быть встроенной или определяемой пользователем функцией.
В следующем разделе вы начнете кодировать простые примеры.
Как отсортировать список Python в порядке возрастания
Рассмотрим список nums . Чтобы отсортировать список в порядке возрастания, вы можете вызвать метод sort() в списке.
Запустите следующий фрагмент кода.
nums = [25,13,6,17,9] nums.sort() print(nums) # Output: [6, 9, 13, 17, 25] Номера nums были отсортированы в порядке возрастания, а исходный список был изменен. Это называется сортировкой на месте .
Как отсортировать список Python по убыванию
Чтобы отсортировать список в порядке убывания, установите для параметра reverse значение True , как показано ниже.
nums = [25,13,6,17,9] nums.sort(reverse = True) print(nums) # Output: [25, 17, 13, 9, 6]Вы можете видеть, что список теперь отсортирован в порядке убывания.
Как использовать ключ с методом Python sort()
В этом разделе давайте воспользуемся key параметром и настроим сортировку.
Здесь mod5() — это функция, которая принимает число x и возвращает остаток, когда число x делится на 5.
def mod5(x): return x % 5 И мы хотели бы использовать вышеуказанную функцию в качестве key .
Теперь запустите следующую ячейку кода.
nums = [25,13,6,17,9] nums.sort(key = mod5) print(nums) # Output: [25, 6, 17, 13, 9]Потратьте минуту, чтобы проанализировать вывод.
Обратите внимание, что вместо обычной сортировки вы теперь настраиваете свою сортировку в соответствии с key mod5 .
- Теперь первым идет число, которое оставляет минимальный остаток при делении на 5.
- И число, которое оставляет наибольший остаток при делении на 5, является последним элементом в отсортированном списке.
Чтобы убедиться, что это так, запустите следующий фрагмент кода.
nums = [25,13,6,17,9] for num in nums: print(f"{num} leaves remainder {num%5} when divided by 5") # Output 25 leaves remainder 0 when divided by 5 13 leaves remainder 3 when divided by 5 6 leaves remainder 1 when divided by 5 17 leaves remainder 2 when divided by 5 9 leaves remainder 4 when divided by 55 точно делит 25, а остаток равен 0. Итак, это первый элемент в отсортированном списке. 6 оставляет остаток 1, так что это второй элемент, и так далее. 9 оставляет остаток 4 при делении на 5, и это последний элемент в отсортированном списке.
Вместо определения отдельной функции вы также можете использовать лямбда-функции. В Python лямбды — это однострочные анонимные функции. lambda args:expression возвращает выражение , вычисленное для args .
Теперь давайте перепишем приведенную выше сортировку, используя лямбда-выражение, как показано ниже.
nums = [25,13,6,17,9] nums.sort(key = lambda x:x%5) print(nums) # Output: [25, 6, 17, 13, 9]Итак, вы узнали, как сортировать список чисел. Далее давайте посмотрим, как можно отсортировать список строк в Python.
Как отсортировать список Python в алфавитном порядке
В этом разделе вы научитесь сортировать список строк на примерах, вдохновленных Гарри Поттером.

В нашем примере students — это список студентов Хогвартса. И мы хотели бы отсортировать их в алфавитном порядке их имен.
При сортировке списка строк сортировка по умолчанию выполняется в алфавитном порядке.
students = ["Harry","Ron","Hermione","Draco","Cedric"]Распечатаем отсортированный список, чтобы проверить результат сортировки.
students.sort() print(students) # Output ['Cedric','Draco', 'Harry', 'Hermione', 'Ron']Как отсортировать список Python в обратном алфавитном порядке
Чтобы отсортировать список в обратном алфавитном порядке, установите reverse = True , как показано во фрагменте кода ниже.
students.sort(reverse = True) print(students) # Output ['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']Из вывода видно, что список действительно отсортирован в обратном порядке.
Как использовать ключевой параметр Настройка сортировки
В этом разделе давайте настроим сортировку, используя необязательный key параметр.
Рассмотрим следующий список, houses .
houses = [ {1:"Draco","house":"Slytherin"}, {2:"Harry","house":"Gryffindor"}, {3:"Cedric","house":"Hufflepuff"} ] Здесь houses — это список словарей. Каждый словарь содержит две пары ключ-значение, одна из которых обозначает имена студентов, а другая — дом, к которому они принадлежат.
Теперь мы хотели бы отсортировать этот список домов в алфавитном порядке домов , которым они принадлежат.
Как вы уже могли догадаться, мы должны установить key параметр дома конкретных студентов.

Чтобы получить дом каждого студента, вы можете определить функцию returnHouse() , как показано ниже.
def returnHouse(student): return student['house']Эта функция возвращает дом, которому принадлежит конкретный студент.
Теперь вы можете вызвать метод sort() для списка домов, как показано на рисунке.
houses.sort(key=returnHouse)В приведенном ниже выводе обратите внимание, как список отсортирован по домам, а не по именам учеников. Вот почему у нас есть Гриффиндор, Хаффлпафф и Слизерин — в алфавитном порядке.
print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}] Чтобы соответствующим образом определить key параметр, вы также можете использовать лямбда-функцию. Для каждого элемента списка эта функция возвращает дом для этого элемента списка.
Запустите следующую ячейку кода, чтобы убедиться в этом.
houses.sort(key=lambda student:student["house"]) print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}] Во всех предыдущих примерах вы использовали метод sort() для списка. И теперь вы знаете, что он изменяет исходный список.
Что, если вы хотите сохранить исходный список как есть, но получить отсортированную копию списка?
Что ж, в Python для этого можно использовать функцию sorted() .
Синтаксис функции Python sorted()
Функция sorted() принимает в качестве аргумента список или любую коллекцию. И он возвращает отсортированную копию списка, а исходный список не изменяется.
Синтаксис функции sorted() в Python:
<sorted_copy> = sorted(<list>, reverse = True | False, key = <func>) Обратите внимание, что синтаксис очень похож на метод sort() , который мы видели ранее.
-
<list>— это любой допустимый объект списка Python и обязательный параметр. -
reverseиkeyявляются необязательными параметрами
Примечание . В отличие от метода
sort(), который работает только со списками, функцию sortedsorted()можно использовать для сортировки любого итерируемого объекта Python, например списков, строк и словарей.
Как отсортировать список Python с помощью функции sorted()
№1. В этом примере nums — это список чисел.
Вы можете вызвать функцию nums sorted() с числами в качестве аргумента. И назначьте его списку sorted_nums1 .
nums = [25,13,6,17,9] sorted_nums1 = sorted(nums) print(sorted_nums1) # Output: [6, 9, 13, 17, 25] В приведенном выше выводе вы можете видеть, что nums по умолчанию отсортированы в порядке возрастания.
Также обратите внимание, что исходный список nums не изменяется, потому что sorted() возвращает новый список. Это проверяется ниже.
print(nums) # Output: [25, 13, 6, 17, 9] # 2 . Теперь установите для необязательного параметра reverse значение True и получите sorted_nums2 .
Как показано в кодовой ячейке ниже, sorted_nums2 — это новый список с элементами, отсортированными в порядке убывания.
sorted_nums2 = sorted(nums,reverse = True) print(sorted_nums2) # Output: [25, 17, 13, 9, 6]№3. В этом примере давайте поработаем со списком строк.
Как и в предыдущих примерах, вызов функции sorted() возвращает новый список. И элементы отсортированы в алфавитном порядке.
fruits = ['pears','strawberry','apple','pineapple','blueberry'] sorted_fr1 = sorted(fruits) print(sorted_fr1) # Output: ['apple', 'blueberry', 'pears', 'pineapple', 'strawberry'] № 4. Теперь давайте настроим сортировку, используя необязательный key параметр. Установите key на len . Это отсортирует список на основе длины строк.
Примечание. В Python встроенная функция
len()принимает любые итерируемые объекты, такие как списки, строки, кортежи и т. д. И он возвращает длину итерации.
Строка с наименьшей длиной появляется первой в отсортированном списке, а самая длинная строка появляется в конце отсортированного списка.
fruits = ['pear','strawberry','apple','pineapple','blueberry'] sorted_fr2 = sorted(fruits,key=len) print(sorted_fr2) # Output: ['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']В выходных данных выше груша — самая короткая строка, а клубника — самая длинная строка.
Метод Python sort() и функция sorted()
Итак, вы узнали, как использовать метод sort() , а также функцию sorted() . В этом разделе давайте перечислим различия между этими двумя методами.
| Метод Python .sort() | Функция Python sorted() |
| Сортирует список на месте — изменяет исходный список | Возвращает новый отсортированный список |
| Работает только со списками Python | Работает с итерируемыми объектами Python, такими как списки, строки и другие коллекции. |
Имеет возвращаемый тип None | Возвращает отсортированную копию итерируемого |
Подводя итоги
Я надеюсь, что вы нашли этот учебник по спискам Python полезным.
Давайте быстро подведем итог тому, что мы рассмотрели.
- Используйте list.sort(reverse = True | False, key = <func>) с необязательными параметрами reverse и key для сортировки списка на месте.
- Используйте sorted(list, reverse = True | False, key = <func>) , чтобы получить отсортированную копию списка.
Теперь, когда вы узнали, как сортировать списки Python, узнайте, как интерпретировать списки в Python. Или вы также можете научиться обрабатывать файлы или работать с файлами JSON в Python.
Вы можете попробовать приведенные выше примеры в онлайн-компиляторе Python Geekflare.
