Share This
Связаться со мной
Крути в низ
Categories
//Использование лямбда-функции для сортировки списков в Python

Использование лямбда-функции для сортировки списков в Python

18.07.2021Category : Python

Перевод статьи «How to sort with lambda in Python».

Операции сортировки применяются к спискам данных на любом языке программирования. В Python для хранения наборов данных используются кортеж, список и словарь. Доступ к значениям кортежа и списка осуществляется по индексу, а к значениям словаря — по ключам.

В Python есть множество встроенных функций для сортировки списка данных в порядке возрастания или убывания. Лямбда-функция – одна из них. С ее помощью мы можем определить порядок сортировки в зависимости от требований.

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

Пример 1. Сортировка списка чисел в формате строковых данных

Напишем код для сортировки списка строковых данных, которые являются числами, с применением лямбда-функции.

Зададим список из 6 элементов. Лямбду будем использовать внутри функции sorted() для сортировки списка.

В качестве первого аргумента функции указывается переменная списка, лямбда устанавливается ​​в качестве значения ключа, а третьим аргументом передается начальная позиция сортировки. При помощи print() выводим в консоль отсортированный список через пробел.

n_list = ['11', '50', '5', '1', '37', '19'] # Sort the list using lambda and sorted function sorted_list = sorted(n_list, key=lambda x: int(x[0:])) # Print the sorted list print("The list of the sorted values are:") for value in sorted_list:     print(value, end=' ')

Запустив наш код, получим следующий результат.

The list of the sorted values are: 1 5 11 19 37 50 

Пример 2. Сортировка списка кортежей

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

Здесь мы используем три типа сортировки.

В первой сортирующей функции позиция сортировки устанавливается в 0. Таким образом мы отсортируем список по первым элементам кортежей.

Во второй сортирующей функции позиция сортировки – 1. Так мы отсортируем список по вторым элементам кортежей.

Чтобы отсортировать список по третьим элементам кортежей, установим позицию сортировки 2.

tuple_list = [("HTML", 15, 'M01'), ("JavaScript", 10, 'M03'), ("Bootstrap", 5, 'M02')] # Sort the list based on the first item of the tuple sorted_list1 = sorted(tuple_list, key=lambda x: x[0]) # Print the first sorted list print("The sorted list based on the first item:n", sorted_list1) # Sort the list based on the second item of the tuple sorted_list2 = sorted(tuple_list, key=lambda x: x[1]) # Print the second sorted list print("The sorted list based on the second item:n", sorted_list2) # Sort the list based on the third item of the tuple sorted_list3 = sorted(tuple_list, key=lambda x: x[2]) # Print the third sorted list print("The sorted list based on the third item:n", sorted_list3)

Запустим наш код и получим три списка кортежей, отсортированных по указанным позициям.

The sorted list based on the first item:  [('Bootstrap', 5, 'M02'), ('HTML', 15, 'M01'), ('JavaScript', 10, 'M03')] The sorted list based on the second item:  [('Bootstrap', 5, 'M02'), ('JavaScript', 10, 'M03'), ('HTML', 15, 'M01')] The sorted list based on the third item:  [('HTML', 15, 'M01'), ('Bootstrap', 5, 'M02'), ('JavaScript', 10, 'M03')]

Пример 3. Сортировка списка, состоящего из других списков

Теперь давайте напишем код для сортировки вложенного списка с использованием нашей лямбда-функции.

Объявим пустой список для хранения значений отсортированного списка. Для сортировки элементов вложенного списка воспользуемся вложенными циклами for . Внешний цикл for будет повторяться в зависимости от количества внутренних списков, определенных в основном списке.

В нашем случае у нас есть три внутренних списка. Первый из них имеет три элемента, второй – два, а третий состоит из четырех элементов. Количество итераций внутреннего цикла for будет зависеть от количества элементов в каждом внутреннем списке.

Функция sorted() вызывает лямбда-выражение внутри внутреннего цикла для сортировки вложенного списка.

nested_list = [['Mango', 'Banana', 'Orange'], ['Rose', 'Lily'], ['Lion', 'Monkey', 'Tiger', 'Deer']] # Declare an empty list sorted_data = []  # Loop to iterate the outer list for i in range(len(nested_list)):     # Loop to iterate the inner list     for j in range(len(nested_list[i])):         # Sort the inner list         sorted_list = sorted(nested_list[i], key=lambda x: x[0])     # Append the sorted list     sorted_data.append(sorted_list)  # Print the sorted nested list print("The list after sorting:n {}".format(sorted_data))

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

The list after sorting:  [['Banana', 'Mango', 'Orange'], ['Lily', 'Rose'], ['Deer', 'Lion', 'Monkey', 'Tiger']]

Пример 4. Сортировка списка словарей

Напишем код для сортировки списка, состоящего из словарей, с использованием лямбда-функции.

Каждый словарь внутри списка содержит три пары ключ-значение.

Рассмотрим четыре типа сортировки. Первый использует сортировку на основе ключа code. Второй – на основе ключа name. Третий способ демонстрирует сортировку на основе обоих этих ключей. В четвертом случае мы видим сортировку в порядке убывания на основе ключа name.

dic_list = [{"code": "CSE-401", "name": "Multimedia", "Credit": 2.0},             {"code": "CSE-101", "name": "Computer Fundamental", "Credit": 1.5},             {"code": "CSE-305", "name": "Unix Programming", "Credit": 3.0}]  # Print the sorted dictionary based on code print("Sorting based on the code:n", sorted(dic_list, key=lambda i: i['code'])) # Print the sorted dictionary based on name print("Sorting based on the name:n", sorted(dic_list, key=lambda i: (i['name']))) # Print the sorted dictionary based on code and name print("Sorting based on the code and name:n", sorted(dic_list, key=lambda i: (i['code'], i['name']))) # Print the sorted dictionary in descending based on name print("Sorting in descending order based on the name:n", sorted(dic_list, key=lambda i: i['name'], reverse=True))

Запустим нашу программу и получим следующий результат.

Sorting based on the code:  [{'code': 'CSE-101', 'name': 'Computer Fundamental', 'Credit': 1.5}, {'code': 'CSE-305', 'name': 'Unix Programming', 'Credit': 3.0}, {'code': 'CSE-401', 'name': 'Multimedia', 'Credit': 2.0}] Sorting based on the name:  [{'code': 'CSE-101', 'name': 'Computer Fundamental', 'Credit': 1.5}, {'code': 'CSE-401', 'name': 'Multimedia', 'Credit': 2.0}, {'code': 'CSE-305', 'name': 'Unix Programming', 'Credit': 3.0}] Sorting based on the code and name:  [{'code': 'CSE-101', 'name': 'Computer Fundamental', 'Credit': 1.5}, {'code': 'CSE-305', 'name': 'Unix Programming', 'Credit': 3.0}, {'code': 'CSE-401', 'name': 'Multimedia', 'Credit': 2.0}] Sorting in descending order based on the name:  [{'code': 'CSE-305', 'name': 'Unix Programming', 'Credit': 3.0}, {'code': 'CSE-401', 'name': 'Multimedia', 'Credit': 2.0}, {'code': 'CSE-101', 'name': 'Computer Fundamental', 'Credit': 1.5}]

Заключение

Мы рассмотрели использование лямбда-функции для сортировки различных списков в Python. Разобрали на простых примерах, как можно отсортировать четыре разных списка. Надеемся, это поможет вам понять цель использования лямбда-функции при сортировке.

ispolzovanie ljambda funkcii dlja sortirovki spiskov v python d56834d - Использование лямбда-функции для сортировки списков в Python

Кодинг-марафон по Python

Реши 10 задач и выиграй 5500 рублей

Подписаться ×

  • 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 2020 / All rights reserved

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