Как сортировать списки в 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 5
5 точно делит 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.