Share This
Связаться со мной
Крути в низ
Categories
//Сортировка списков в Python

Сортировка списков в Python

12.09.2021Category : Python

В Python данные можно сортировать с помощью методов sorted() или sort(). В этой статье мы поговорим о том, как работает сортировка списков в Python. Разберем примеры кода для методов sorted() и sort() и посмотрим, чем они отличаются.

Что такое метод sort() в Python?

Этот метод берет список и сортирует его. То есть на выходе мы получаем тот же список, только отсортированный. Этот метод не возвращает никакого значения.

В этом примере у нас есть список чисел, и мы можем использовать метод sort() для сортировки списка в порядке возрастания.

my_list = [67, 2, 999, 1, 15]  # Выводим неупорядоченный список: print("Unordered list: ", my_list)  # Сортировка списка my_list.sort()  # Выводим упорядоченный список print("Ordered list: ", my_list)

Выполним наш код и получим следующий результат:

Unordered list:  [67, 2, 999, 1, 15] Ordered list:  [1, 2, 15, 67, 999]

Однако если список уже отсортирован, то мы получим None.

my_list = [6, 7, 8, 9, 10]  # Это строка вернет None, потому что список уже отсортирован print(my_list.sort())

Метод sort() может принимать два необязательных аргумента: key и reverse.

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

От редакции Pythonist. О функциях и их аргументах у нас есть отдельная статья — «Функции и их аргументы в Python 3».

В следующем примере давайте используем функцию len() в качестве значения аргумента key. Таким образом, key=len скажет компьютеру отсортировать список имен по длине, от наименьшего к наибольшему.

names = ["Jessica", "Ben", "Carl", "Jackie", "Wendy"]  print("Unsorted: ", names) names.sort(key=len) print("Sorted: ", names) 

Вот, что мы получим:

Unsorted:  ['Jessica', 'Ben', 'Carl', 'Jackie', 'Wendy'] Sorted:  ['Ben', 'Carl', 'Wendy', 'Jackie', 'Jessica']

Аргумент reverse может иметь логическое значение: True (Истина) или False (Ложь).

В следующем примере reverse=True укажет компьютеру отсортировать список в обратном алфавитном порядке.

names = ["Jessica", "Ben", "Carl", "Jackie", "Wendy"]  print("Unsorted: ", names) names.sort(reverse=True) print("Sorted: ", names)  # Результат: # Unsorted:  ['Jessica', 'Ben', 'Carl', 'Jackie', 'Wendy'] # Sorted:  ['Wendy', 'Jessica', 'Jackie', 'Carl', 'Ben']

sortirovka spiskov v python 378a061 - Сортировка списков в Python

Марк Лутц «Изучаем Python»

Скачивайте книгу у нас в телеграм

Скачать ×

Как использовать метод sorted() в Python

Этот метод превращает итерируемый объект в отсортированный список. Итерируемыми объектами могут быть списки, строки и кортежи.

Одно из ключевых различий между sort() и sorted() заключается в том, что sorted() вернет новый список, а sort() сортирует уже имеющийся.

В следующем примере у нас есть список чисел, который нужно отсортировать в порядке возрастания.

sorted_numbers = sorted([77, 22, 9, -6, 4000])  print("Sorted in ascending order: ", sorted_numbers)  # Результат: # Sorted in ascending order:  [-6, 9, 22, 77, 4000]

Метод sorted() тоже принимает необязательные аргументы. Они такие же, как и у sort(): key и reverse.

Давайте разберем следующий пример. У нас есть список чисел. Пропишем необязательный аргумент reverse=True. Он укажет компьютеру отсортировать список от наибольшего числа к наименьшему.

sorted_numbers = sorted([77, 22, 9, -6, 4000], reverse=True)  print("Sorted in descending order: ", sorted_numbers)  # Результат: # Sorted in descending order:  [4000, 77, 22, 9, -6]

Метод sorted() для других типов данных

Еще одно ключевое различие между sorted() и sort() заключается в том, что метод sorted() принимает любые итерируемые объекты (списки, строки, кортежи и т.д.), тогда как метод sort() работает только со списками.

Давайте разобьём строку на отдельные слова с помощью метода split(), а затем используем метод sorted() для сортировки слов по длине от наименьшего к наибольшему.

my_sentence = "Jessica found a dollar on the ground"  # Вывод оригинального предложения:  print("Original sentence: ", my_sentence)  # Вывод отсортированного списка слов: print(sorted(my_sentence.split(), key=len))  # Результат: # Original sentence:  Jessica found a dollar on the ground # ['a', 'on', 'the', 'found', 'dollar', 'ground', 'Jessica']

А теперь давайте чуть изменим наш пример. Добавим необязательный аргумент reverse. Благодаря этому список будет отсортирован в обратном порядке, от самого длинного слова к самому короткому.

my_sentence = "Jessica found a dollar on the ground"  print("Original sentence: ", my_sentence) print(sorted(my_sentence.split(), key=len, reverse=True))  # Результат: # Original sentence:  Jessica found a dollar on the ground # ['Jessica', 'dollar', 'ground', 'found', 'the', 'on', 'a']

Мы также можем использовать метод sorted() и для кортежей.

В этом примере у нас есть набор кортежей, которые представляют имя, возраст и музыкальный инструмент учащихся какой-то группы.

band_students = [     ('Danny', 17, 'Trombone'),     ('Mary', 14, 'Flute'),     ('Josh', 15, 'Percussion') ]

Мы можем использовать метод sorted() для сортировки этих данных по возрасту учащегося. Аргумент key будет иметь значение лямбда-функции, которая сообщает компьютеру о сортировке по возрасту в порядке возрастания.

Лямбда-функция – это анонимная функция. Этот тип функции можно определить с помощью ключевого слова lambda.

Итак, напишем следующую лямбду-функцию, которая будет говорить нашей программе, что отсортировать мы хотим именно по возрасту:

lambda student: student[1]

Чтобы получить доступ к значению в кортеже, мы используем квадратные скобки [] и индекс элемента в кортеже, к которому хотим получить доступ. Поскольку в Python отсчет идет с нуля, возраст у нас будет под индексом [1].

Таким образом, мы получаем следующий код:

band_students = [     ('Danny', 17, 'Trombone'),     ('Mary', 14, 'Flute'),     ('Josh', 15, 'Percussion') ]  print(sorted(band_students, key=lambda student: student[1]))  # Результат: # [('Mary', 14, 'Flute'), ('Josh', 15, 'Percussion'), ('Danny', 17, 'Trombone')]

Мы можем изменить этот пример. Давайте отсортируем кортежи по названиям музыкальных инструментов. Более того, давайте используем reverse=True для сортировки инструментов в обратном алфавитном порядке.

band_students = [     ('Danny', 17, 'Trombone'),     ('Mary', 14, 'Flute'),     ('Josh', 15, 'Percussion') ]  print(sorted(band_students, key=lambda student: student[2], reverse=True))  # Результат: # [('Danny', 17, 'Trombone'), ('Josh', 15, 'Percussion'), ('Mary', 14, 'Flute')]

Заключение

В этой статье мы разобрали, как работает сортировка списков в Python. Узнали, как работать с такими методами, как sort() и sorted(), и в чем их различия.

Метод sort() работает только со списками и сортирует уже имеющийся список. Данный метод ничего не возвращает.

А метод sorted() работает с любыми итерируемыми объектами и возвращает новый отсортированный список. В качестве итерируемых объектов могут выступать списки, строки, кортежи и другие.

У обоих этих методов есть два необязательных аргумента: key и reverse.

Значением аргумента key может быть функция. Она будет вызываться для каждого элемента в списке. По этой функции, собственно, и будет проводиться сортировка.

Значением аргумента reverse может быть True или False.

Надеемся, эта статья была для вас полезна. Успехов в написании кода!

Перевод статьи «Python Sort List – How to Order By Descending or Ascending».

sortirovka spiskov v python 946b24a - Сортировка списков в Python

Марк Лутц «Изучаем Python»

Скачивайте книгу у нас в телеграм

Скачать ×

  • 1 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Свежие комментарии

    Рубрики

    About Author 01.

    blank
    Roman Spiridonov

    Моя специальность - Back-end Developer, Software Engineer Python. Мне 39 лет, я работаю в области информационных технологий более 5 лет. Опыт программирования на Python более 3 лет. На Django более 2 лет.

    Categories 05.

    © Speccy 2022 / All rights reserved

    Связаться со мной
    Close