Во время работы над одним проектом, связанным с матрицей Python, мне пришлось сортировать большой объем данных во вложенном списке (списке списков). Проверим, как получить ожидаемый результат, на практических примерах.

Содержание

С помощью метода 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.

С помощью метода sort()

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 демонстрирует фрагменты кода и соответствующие выходные данные для каждого обсуждаемого метода.

C методом sorted()

С лямбда-функцией

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

С методом sorted()

Функция 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 иллюстрируют реализацию кода и полученный результат.

Функция map()

Без использования встроенных функций

Мы создадим специальную функцию для сортировки списка списков в 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() для достижения пользовательских критериев сортировки. Для тех, кто ищет альтернативный подход, также была продемонстрирована пользовательская функция сортировки с использованием алгоритма пузырьковой сортировки.

Добавить комментарий