Розуміння відсортованої функції в Python: простий посібник

Однією з чудових переваг використання Python є його простота. Працювати з ним легко, оскільки його стандартна бібліотека має багато корисних функцій. Однією з таких функцій є сортована функція.

Ця функція використовується для сортування ітерованих елементів за певним порядком. Без такої функції потрібно писати код, що реалізує алгоритм сортування, наприклад Bubble Sort або Insertion Sort. Це часто важко, але Python пропонує простіший спосіб, який ми розглянемо в цій статті.

Вступ до функції сортування

Функція sorted — це функція, яка сортує ітерації в Python. Ітерація — це будь-яке значення, яке можна перейти в циклі. Приклади ітерованих елементів включають рядки, списки, кортежі та набори. Ці ітеровані елементи часто не впорядковані, і сортування розміщує їхні значення в певному порядку. Упорядкування значень є корисним, оскільки:

  • Пошук за значеннями є швидшим і ефективнішим за допомогою таких алгоритмів, як двійковий пошук. Однак двійковий пошук вимагає, щоб значення спочатку були відсортовані.
  • Для відображення значень. Іноді користувачі хочуть переглядати інформацію впорядковано, наприклад, спочатку найнижча ціна або спочатку найновіша публікація. Це вимагатиме реалізації певного способу сортування списку значень.
  • Під час виконання статистичного аналізу, наприклад, пошуку значення, яке найчастіше зустрічається в наборі. Це легше зробити, коли значення відсортовані в порядку.

Відсортований посібник із використання функцій

Як згадувалося раніше, функція сортування працює з усіма ітераціями. У свою чергу, він повертає відсортований список. Це важливо зазначити – хоча вхідні дані можуть бути будь-якими ітерованими, повертане значення завжди має бути списком.

Синтаксис відсортованої функції

Сигнатура відсортованої функції така:

sorted(iterable, key=None, reverse=False)

Як бачите, єдиним необхідним аргументом є iterable, який буде відсортовано.

  Як скасувати подію в Календарі Google

Наступний аргумент є ключовим. Ключ — це функція, яка використовуватиметься для перетворення кожного елемента в ітерації для отримання значення, яке використовуватиметься для сортування. Це буде корисно для сортування списку словників, як ви побачите пізніше. Значенням за замовчуванням є none, тому воно не застосовуватиме жодну функцію, якщо не вказано.

Останній аргумент є зворотним аргументом. Якщо встановлено значення true, елементи будуть відсортовані у зворотному порядку.

У наступному розділі я використаю приклади, щоб продемонструвати, як використовувати функцію.

Приклади використання відсортованих функцій

Список чисел

Найпростішим випадком сортування значень є сортування списку чисел. Розглянемо наступний приклад коду:

# A list of unsorted values
numbers = [8, 4, 3, 9, 2, 0, 3]

# Sorting the numbers
sorted_numbers = sorted(numbers)

# Outputting the sorted values
print(sorted_numbers)

Результатом буде:

[0, 2, 3, 3, 4, 8, 9]

Як бачите, значення відсортовано в порядку зростання. Ви б встановили для reverse значення true, якщо б ви хотіли відсортувати їх у порядку спадання. Тому рядок 4 у попередньому прикладі коду буде таким:

sorted_numbers = sorted(numbers, reverse=True)

Результатом виконання зміненої програми буде:

[9, 8, 4, 3, 3, 2, 0]

Список рядків

Функція sorted підтримує більше, ніж просто числа. Ви також можете сортувати рядки. Для сортування рядків у списку порівнюються перші символи рядків. Порівняння виконується на основі значень ASCII символів. Наприклад, «hello» буде стояти перед словом «world», оскільки значення ASCII «h» дорівнює 104, менше ніж значення ASCII «w», 119.

Якщо один або кілька рядків мають однаковий перший символ, їх другий і наступні символи порівнюються, поки не буде знайдено певний порядок. Ось приклад коду, де ми сортуємо імена людей.

# Creating a list of names
members_list = ['bob', 'dave', 'charlie', 'alice']

# Sorting the names
sorted_members_list = sorted(members_list)

# Printing the names
print(sorted_members_list)

Це дасть наступний результат:

['alice', 'bob', 'charlie', 'dave']

Оскільки використовуються значення ASCII, порядок рядків залежить від того, який символ стоїть першим у таблиці ASCII. Наприклад, символ верхнього регістру буде стояти перед малим, тому що символи верхнього регістру стоять перед літерами нижнього регістру в ASCII. Ось повна таблиця ASCII для довідки:

  Як отримати індивідуальні розміри пензля в MS Paint

Джерело: commons.wikimedia.org

Інші ітеровані елементи – рядки, кортежі та набори

Як я вже згадував, функція sorted працює з усіма видами ітерацій. Ті самі правила застосовуються до того, як будуть сортуватися значення в ітераціях. Ось приклад:

# Printing a sorted string
print(sorted("dijkstra"))

# Printing a sorted tuple of values
print(sorted((3, 4, 2, 1, 5, 0)))

# Printing a sorted set of values
print(sorted(set([4, 5, 5, 1, 3, 8, 9])))

Результатом цього буде:

['a', 'd', 'i', 'j', 'k', 'r', 's', 't']
[0, 1, 2, 3, 4, 5]
[1, 3, 4, 5, 8, 9]

Як ви бачите, результатом у кожному випадку є список.

Список словників

Ви також можете застосувати функцію sorted для сортування списку словників. Однак сортування словників дещо складніше. Це пояснюється тим, що, на відміну від чисел або рядків, словник має кілька властивостей, кожна з яких однаково придатна для порівняння.

Отже, щоб сортувати словники, ви вказуєте функцію, яка підсумовуватиме весь словник до одного значення, яке використовуватиметься для порівняння. Ця функція буде передана відсортованій функції як ключовий аргумент. Ось приклад для ілюстрації:

people = [
        { 'name': 'Alice', 'age': 27 },
        { 'name': 'Bob', 'age':  23 },
        { 'name': 'Charlie', 'age': 25}
]

people_sorted_by_age = sorted(people, key=lambda person: person['age'])
print(people_sorted_by_age)

У цьому прикладі ми маємо трьох людей, представлених об’єктом словника. Кожен об’єкт має назву та атрибут віку. Ми хочемо сортувати людей за віком. Тому, коли ми викликаємо відсортовану функцію, ми передаємо функцію як ключовий аргумент.

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

  10 найкращих систем безпеки DVR, щоб бути на крок попереду зловмисників

Виконання коду дасть наступний результат:

[{'name': 'Bob', 'age': 23}, {'name': 'Charlie', 'age': 25}, {'name': 'Alice', 'age': 27}]

Випадок використання ключового аргументу

Ключовий аргумент необов’язково використовувати лише під час сортування словників. Ви можете використовувати його для всіх значень. Його використання полягає в наданні ключа, який можна використовувати для сортування значень. Ось приклади використання:

  • Сортування значень шляхом визначення ключової функції, яка приймає значення та повертає довжину значення.
  • Сортування рядків у списку без урахування регістру. Для цього кожен рядок у списку можна перетворити на нижній регістр. Цього можна досягти, визначивши функцію ключа, яка приймає ключове значення рядка та повертає версію рядка в нижньому регістрі.
  • Сортування значень на основі складеного значення, яке поєднує значення інших записів.

Складність виконання відсортованої функції

Відсортована функція має складність виконання O(n log n), де n — кількість елементів у вхідному ітераторі. Ця складність виникає через те, що функція використовує алгоритм Тімсорта, який є гібридним алгоритмом сортування, заснованим на сортуванні злиттям і сортуванні вставкою.

Просторова складність функції дорівнює O(n), де n все ще є кількістю елементів у вхідних даних. Це тому, що створюється та повертається новий список.

Відсортована функція проти функції сортування

Іншим варіантом сортування значень є функція сортування. У цьому розділі пояснюються основні відмінності між функціями sorted і sort.

  • Функція sort змінює iterable на місці, тоді як функція sorted створює новий список і повертає його.
  • Оскільки зміни виконуються на місці, сортування вимагає, щоб вхідні дані були списком. З іншого боку, sorted може приймати будь-який ітерований елемент як вхідні дані, які потім використовуватимуться для створення нового списку, який буде змінено та повернено.

Заключні слова

У цій статті ми розглянули функцію сортування — що це таке, як нею користуватися та різні аргументи, які вона приймає. Ми також розглянули різні приклади використання функції та її складність під час виконання та порівняли її з функцією сортування.

Далі ви можете прочитати нашу статтю про функцію суми Python.