Во время работы над одним проектом, связанным с матрицей Python, мне пришлось сортировать большой объем данных во вложенном списке (списке списков). Проверим, как получить ожидаемый результат, на практических примерах.
- С помощью метода sort()
- C методом sorted()
- С лямбда-функцией
- С методом sorted()
- Функция map()
- Без использования встроенных функций
- Заключение
С помощью метода sort()
Sort() — это встроенный метод Python, который сортирует элементы списка по месту.
Используя sort() вместе с лямбда-функцией или другим вызываемым объектом, мы можем легко отсортировать список списков в соответствии с конкретными требованиями.
Метод sort() не может создать копию исходного списка и изменит его напрямую.
Код^
list_of_lists = [['New York', 20000000, 800, 30], ['Los Angeles', 15000000, 600, 80], ['Chicago', 9000000, 500, 40]] # Sort based on the third element of each sublist list_of_lists.sort(key=lambda x: x[3]) print(list_of_lists)
Этот код демонстрирует сортировку исходного списка списков в Python с использованием метода sort().
Выход^
[['New York', 20000000, 800, 30], ['Chicago', 9000000, 500, 40], ['Los Angeles', 15000000, 600, 80]]
Cнимок кода и выходных данных, полученных из Visual Studio.
C методом sorted()
Функция sorted() в Python сортирует элементы списка. Однако, в отличие от sort(), sorted() возвращает новый отсортированный список вместо изменения исходного списка. Мы будем использовать itemgetter в качестве параметра метода sorted().
При сортировке списка списков в Python одним из простых подходов является использование функции itemgetter из модуля оператора.
Код:
from operator import itemgetter list_of_lists = [['Urban', 10000000, 200, 3], ['Rural', 5000000, 150, 8], ['Suburban', 8000000, 300, 4]] # Sort based on the first element of each sublist sorted_list = sorted(list_of_lists, key=itemgetter(1)) print(sorted_list)
В приведенном выше примере мы отсортировали список списков, используя функцию sorted() вместе с функцией itemgetter из модуля оператора в Python.
Он сортирует список по первому элементу каждого подсписка. Функция itemgetter(0) в Python указывает, что ключ сортировки должен быть первым элементом каждого подсписка.
Выход:
[['Rural', 5000000, 150, 8], ['Suburban', 8000000, 300, 4], ['Urban', 10000000, 200, 3]]
Visual Studio демонстрирует фрагменты кода и соответствующие выходные данные для каждого обсуждаемого метода.
С лямбда-функцией
Лямбда-функции предлагают краткий способ определения небольших анонимных функций в Python.
Комбинируя лямбда-функции с функцией sorted(), мы можем указать собственные критерии сортировки на основе элементов подсписков в списке списков.
Код:
employee_data = [['John', 35, 'Manager'], ['Emily', 28, 'Engineer'], ['Michael', 40, 'Analyst']] # Sort based on the age(2nd element) of each employee sorted_employee_data = sorted(employee_data, key=lambda x: x[1]) print(sorted_employee_data)
В коде используется функция sorted() и лямбда-функция для сортировки списка списков на основе первого элемента каждого подсписка в Python.
Лямбда-функция лямбда x: x[0] указывает, что ключ сортировки должен быть первым элементом каждого подсписка.
Выход:
[['Emily', 28, 'Engineer'], ['John', 35, 'Manager'], ['Michael', 40, 'Analyst']]
Вот скриншот кода и вывода для вашей справки.
С методом sorted()
Понимание списков в Python обеспечивает компактный и элегантный способ создания списков.
В сочетании с функцией sorted() понимание списков в Python позволяет нам сортировать список списков на основе определенных условий, определенных в понимании.
Код:
customer_data = [[1, 3, 500], [2, 5, 200], [3, 7, 400]] # Sort based on the purchase amount(third element) of each customer using list comprehension sorted_customer_data = sorted(customer_data, key=lambda x: max([element for element in x])) print(sorted_customer_data)
В приведенном выше примере мы используем понимание списка в сочетании с функцией sorted() в Python.
sorted(list_of_lists, key=lambda x: max([element for element in x]))
Понимание списка в Python извлекает все элементы из каждого подсписка x, а max() применяется для поиска максимального элемента.
Выход:
[[2, 5, 200], [3, 7, 400], [1, 3, 500]]
Посмотрите на код и выходные данные Visual Studio, которые дают четкое представление о каждом методе сортировки.
Функция map()
Функция map() применяет заданную функцию Python к каждому элементу итерируемого объекта (например, списка) и возвращает итератор результатов.
Используя map() вместе с функцией sorted(), мы можем применить пользовательскую функцию к каждому элементу списка списков в Python.
Код:
list_of_lists = [[3, 5, 1], [8, 2, 9], [4, 7, 6]] # Sorting based on minimum element in each sublist sorted_list = sorted(list_of_lists, key=lambda x: min(map(lambda y: y, x))) print(sorted_list)
В этом коде мы использовали функцию map() и функцию sorted() для сортировки списка списков в Python на основе минимального элемента в каждом подсписке.
sorted(list_of_lists, key=lambda x: min(map(lambda y: y, x)))
Функция map() применяет лямбда-функцию лямбда y:y к каждому элементу подсписка, а затем используется min() для поиска минимального элемента.
Выход:
[[3, 5, 1], [8, 2, 9], [4, 7, 6]]
Снимки экрана из Visual Studio иллюстрируют реализацию кода и полученный результат.
Без использования встроенных функций
Мы создадим специальную функцию для сортировки списка списков в Python, которая будет принимать параметры в виде списка списков. Затем мы воспользуемся методом пузырьковой сортировки для сортировки списка списков без использования каких-либо встроенных методов.
Код:
def sort_list_of_lists(list_of_lists): n = len(list_of_lists) for i in range(n): for j in range(0, n-i-1): if list_of_lists[j] > list_of_lists[j+1]: list_of_lists[j], list_of_lists[j+1] = list_of_lists[j+1], list_of_lists[j] my_list_of_lists = [[3, 5], [1, 2], [4, 6], [2, 3], [5, 1]] sort_list_of_lists(my_list_of_lists) print(my_list_of_lists)
Предоставленный код реализует алгоритм пузырьковой сортировки для сортировки списка списков в порядке возрастания на основе их первых элементов в Python.
На каждой итерации внешнего цикла алгоритм сравнивает соседние подсписки и меняет их местами, если они не в порядке, перемещая самый большой элемент ближе к концу списка. Этот процесс повторяется до тех пор, пока весь список не будет отсортирован в Python.
Выход:
[[1, 2], [2, 3], [3, 5], [4, 6], [5, 1]]
Вот код и скриншоты вывода, сделанные из Visual Studio.
Заключение
Мы изучили встроенные функции, такие как sort() и sorted(), а также лямбда-функции, понимание списков и функцию map() для достижения пользовательских критериев сортировки. Для тех, кто ищет альтернативный подход, также была продемонстрирована пользовательская функция сортировки с использованием алгоритма пузырьковой сортировки.