Как сортировать списки в 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 в алфавитном порядке

В этом разделе вы научитесь сортировать список строк на примерах, вдохновленных Гарри Поттером.

список сортировки 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() , который работает только со списками, функцию sorted sorted() можно использовать для сортировки любого итерируемого объекта 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.