Операции сортировки применяются к спискам данных на любом языке программирования. В 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. Разобрали на простых примерах, как можно отсортировать четыре разных списка. Надеемся, это поможет вам понять цель использования лямбда-функции при сортировке.