Python відсортований ()

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

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

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

 відсортовано (ітерабельно, ключ = Немає, зворотний = Неправильно)

Параметри функції sorted ()

sorted() може приймати максимум три параметри:

  • iterable - послідовність (рядок, кортеж, список) або колекція (набір, словник, заморожений набір) або будь-який інший ітератор.
  • реверс (Необов’язково) - Якщо Trueвідсортований список перевертається ( або сортується у порядку зменшення). За замовчуванням, Falseякщо не вказано.
  • ключ (Необов’язково) - Функція, яка служить ключем для порівняння сортування. За замовчуванням None.

Приклад 1: Сортування рядка, списку та кортежу

 # vowels list py_list = ('e', 'a', 'u', 'o', 'i') print(sorted(py_list)) # string py_string = 'Python' print(sorted(py_string)) # vowels tuple py_tuple = ('e', 'a', 'u', 'o', 'i') print(sorted(py_tuple))

Вихідні дані

 ('a', 'e', ​​'i', 'o', 'u') ('P', 'h', 'n', 'o', 't', 'y') ('a' , "e", "i", "o", "u")

Зверніть увагу, що у всіх випадках повертається відсортований список.

Примітка: Список також має метод sort (), який працює так само, як і sorted(). Єдина відмінність полягає в тому, що sort()метод не повертає жодного значення і змінює вихідний список.

Приклад 2: Сортування за спаданням

sorted()Функція приймає reverseпараметр як додатковий аргумент.

Налаштування reverse = Trueсортує ітерацію за спаданням.

 # set py_set = ('e', 'a', 'u', 'o', 'i') print(sorted(py_set, reverse=True)) # dictionary py_dict = ('e': 1, 'a': 2, 'u': 3, 'o': 4, 'i': 5) print(sorted(py_dict, reverse=True)) # frozen set frozen_set = frozenset(('e', 'a', 'u', 'o', 'i')) print(sorted(frozen_set, reverse=True))

Вихідні дані

 ('u', 'o', 'i', 'e', ​​'a') ('u', 'o', 'i', 'e', ​​'a') ('u', 'o' , "i", "e", "a")

ключ Параметр у функції Python sorted ()

Якщо ви хочете власну реалізацію для сортування, sorted()також приймає keyфункцію як необов’язковий параметр.

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

 відсортовано (ітерабельно, key = len)

Ось len()вбудована функція Python для підрахунку довжини об’єкта.

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

Приклад 3: Сортування списку за допомогою sorted (), що має функцію ключа

 # take the second element for sort def take_second(elem): return elem(1) # random list random = ((2, 2), (3, 4), (4, 1), (1, 3)) # sort list with key sorted_list = sorted(random, key=take_second) # print list print('Sorted list:', sorted_list)

Вихідні дані

 Відсортований список: ((4, 1), (2, 2), (1, 3), (3, 4))

Приклад 4: Сортування за допомогою декількох ключів

Припустимо, що у нас є такий список:

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100, Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) )

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

Ми можемо досягти цього типу сортування за допомогою декількох ключів, повернувши кортеж замість числа.

Два кортежі можна порівняти, порівнявши їх елементи, починаючи з першого. Якщо є зв’язок (елементи рівні), другий елемент порівнюється тощо.

 >>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True

Давайте використаємо цю логіку для побудови нашої логіки сортування.

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) def sorter(item): # Since highest marks first, least error = most marks error = 100 - item(1) age = item(2) return (error, age) sorted_list = sorted(participant_list, key=sorter) print(sorted_list)

Вихідні дані

 (('Джиммі', 90, 22), ('Теренс', 75, 12), ('Девід', 75, 20), ('Елісон', 50, 18), ('Джон', 45, 12) )

Оскільки логічна функція сортування невелика і вміщується в один рядок, lambdaфункція використовується всередині, keyа не передає окреме ім'я функції.

Вищезазначену програму можна записати за допомогою lambdaфункції таким чином:

 # Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) sorted_list = sorted(participant_list, key=lambda item: (100-item(1), item(2))) print(sorted_list)

Вихідні дані

 (('Джиммі', 90, 22), ('Теренс', 75, 12), ('Девід', 75, 20), ('Елісон', 50, 18), ('Джон', 45, 12) )

Щоб дізнатись більше про лямбда-функції, відвідайте Python Lambda Functions.

Цікаві статті...