Як сортувати списки в Python

Ця стаття навчить вас сортувати список у Python.

У Python ви можете використовувати метод sort() для сортування списку на місці. Або ви можете скористатися вбудованою функцією sorted(), щоб отримати відсортовану копію списку.

У цьому посібнику ви дізнаєтеся:

  • Синтаксис методу sort() і функції sorted().
  • Приклади коду сортування списків за зростанням і спаданням
  • Налаштуйте сортування за допомогою параметра key
  • Різниця між sort() і sorted()

Починаємо!👩🏽‍💻

Синтаксис методу sort() Python

Метод sort() діє зі списком Python. І він сортує список на місці — і змінює вихідний список.

Синтаксис методу sort() Python такий:

<list>.sort(reverse = True | False, key = <func>)

Давайте тепер розберемо наведений вище синтаксис.

  • — будь-який дійсний об’єкт списку Python.
  • reverse — це необов’язковий параметр, який приймає True або False.
  • Стандартним значенням reverse є False, і список сортується за зростанням. Укажіть значення True, щоб відсортувати список у порядку спадання.
  • key також є необов’язковим параметром, якому встановлено значення .
  • може бути вбудованою функцією або функцією, визначеною користувачем.

У наступному розділі ви почнете кодувати прості приклади.

Як відсортувати список Python за зростанням

Розгляньте номери списку. Щоб відсортувати список у порядку зростання, ви можете викликати метод sort() у списку.

▶ Запустіть наступний фрагмент коду.

nums = [25,13,6,17,9]
nums.sort()
print(nums)

# Output: [6, 9, 13, 17, 25]

Номери списку було відсортовано за зростанням, а вихідний список було змінено. Це називається сортуванням на місці.

Як відсортувати список Python у порядку спадання

Щоб відсортувати список у порядку спадання, встановіть значення True для зворотного, як показано нижче.

nums = [25,13,6,17,9]
nums.sort(reverse = True)
print(nums)

# Output: [25, 17, 13, 9, 6]

Ви бачите, що список тепер відсортовано в порядку спадання.

Як використовувати ключ із методом sort() Python

У цьому розділі давайте використаємо параметр key і налаштуємо сортування.

Тут mod5() — це функція, яка приймає число x і повертає залишок, коли число x ділиться на 5.

def mod5(x):
  return x % 5 

І ми хотіли б використовувати наведену вище функцію як ключ.

Тепер запустіть наступну клітинку коду.

nums = [25,13,6,17,9]
nums.sort(key = mod5)
print(nums)

# Output: [25, 6, 17, 13, 9]

Приділіть хвилину, щоб проаналізувати вихідні дані.

Зверніть увагу, що замість звичайного сортування ви тепер налаштовуєте сортування відповідно до ключа, яким є 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 лямбда-вирази є однорядковими анонімними функціями. лямбда-аргументи: вираз повертає вираз, обчислений на основі аргументів.

Тепер давайте перепишемо наведене вище сортування за допомогою лямбда-виразу, як показано нижче.

nums = [25,13,6,17,9]
nums.sort(key = lambda x:x%5)
print(nums)

# Output: [25, 6, 17, 13, 9]

Поки що ви навчилися сортувати список чисел. Далі подивимося, як можна сортувати список рядків у Python.

Як відсортувати список Python в алфавітному порядку

У цьому розділі ви навчитеся сортувати список рядків із прикладами, натхненними Гаррі Поттером. ✨

У нашому прикладі студенти — це список студентів Гоґвортсу. І ми хотіли б відсортувати їх в алфавітному порядку їхніх імен.

Під час сортування списку рядків сортування за замовчуванням здійснюється в алфавітному порядку.

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']

З результату ви можете побачити, що список справді відсортовано у зворотному порядку.

Як використовувати ключовий параметр Налаштувати сортування

У цьому розділі давайте налаштуємо сортування за допомогою додаткового параметра ключа.

Розглянемо наступний список, будинки.

houses = [
            {1:"Draco","house":"Slytherin"},
            {2:"Harry","house":"Gryffindor"},
            {3:"Cedric","house":"Hufflepuff"}
         ]

Тут будинки – це список словників. Кожен словник містить дві пари «ключ-значення», одна з яких позначає імена студентів, а друга — будинок, до якого вони належать.

Тепер ми хотіли б відсортувати цей список будинків в алфавітному порядку будинків, до яких вони належать.

Як ви вже могли здогадатися, ми повинні встановити ключовий параметр для будинку конкретних студентів.

Щоб отримати будинок кожного студента, ви можете визначити функцію 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'}]

Щоб відповідним чином визначити ключовий параметр, можна також використати лямбда-функцію. Для кожного елемента списку ця функція повертає будинок для цього елемента списку.

▶ Запустіть наступну клітинку коду, щоб перевірити це.

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().

Синтаксис функції sorted() Python

Функція sorted() приймає список або будь-яку колекцію як аргумент. Він повертає відсортовану копію списку, а вихідний список не змінюється.

Синтаксис функції sorted() Python такий:

<sorted_copy> = sorted(<list>, reverse = True | False, key = <func>)

Зверніть увагу, що синтаксис дуже схожий на метод sort(), який ми бачили раніше.

  • — будь-який дійсний об’єкт списку Python і є обов’язковим параметром.
  • реверс і ключ є необов’язковими параметрами

Примітка. На відміну від методу sort(), який діє лише зі списками, функцію sorted() можна використовувати для сортування будь-якого ітерованого Python, наприклад списків, рядків і словників.

Як відсортувати список Python за допомогою функції sorted().

#1. У цьому прикладі 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. Тепер давайте налаштуємо сортування за допомогою додаткового параметра ключа. Встановіть ключ на len. Це відсортує список на основі довжини рядків.

Примітка. У Python вбудована функція len() приймає будь-які ітеровані елементи, такі як списки, рядки, кортежі тощо. І повертає довжину ітерованого.

Рядок із найкоротшою довжиною з’являється першим у відсортованому списку, а найдовший рядок – у кінці відсортованого списку.

fruits = ['pear','strawberry','apple','pineapple','blueberry']
sorted_fr2 = sorted(fruits,key=len)
print(sorted_fr2)

# Output:
['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']

У вихідних даних вище груша — найкоротший рядок, а полуниця — найдовший.

Метод sort() Python проти функції sorted().

Наразі ви навчилися використовувати метод sort(), а також функцію sorted(). У цьому розділі давайте перерахуємо відмінності між цими двома методами.

Python .sort() Метод Python sorted() Функція Сортує список на місці — змінює оригінальний список Повертає новий відсортований список Працює лише зі списками Python Працює з ітерованими елементами Python, такими як списки, рядки та інші колекції Має тип повернення None Повертає відсортовану копію ітерованого

Підведення підсумків 👩‍🏫

Сподіваюся, цей підручник зі списками Python був для вас корисним.

Давайте швидко підсумуємо те, що ми розглянули.

  • Використовуйте list.sort(reverse = True | False, key = ) із необов’язковими параметрами reverse та key для сортування списку на місці.
  • Використовуйте sorted(list, reverse = True | False, key = ), щоб отримати відсортовану копію списку.

Тепер, коли ви навчилися сортувати списки Python, дізнайтеся про розуміння списків у Python. Або ви також можете навчитися обробляти файли або працювати з файлами JSON у Python.

Ви можете спробувати наведені вище приклади в онлайн-компіляторі Python techukraine.net.

  При наведенні курсора Reader забезпечує миттєвий попередній перегляд посилань у плаваючому вікні [Chrome]