Сортування завжди було ключовою операцією, яка виконується для багатьох програм, а також як підпроблема багатьох проблем. Було обговорено багато варіантів і технік, і їх знання можуть бути корисними під час програмування. У цій статті розглядається сортування списків, які містять список. Давайте обговоримо певні способи, якими це можна зробити.
Спосіб №1: Використання sorted() + розуміння списку
У цьому методі ми просто використовуємо скорочення тривалого процесу, який можна застосувати. Список повторюється, а наступний підсписок сортується за допомогою функції sorted, яка також сортує внутрішній список.
циклічний алгоритм планування
Крок bt кроковий підхід:
- Ми починаємо з ініціалізації вкладеного списку test_list, що містить два підсписки, кожен з яких містить різну кількість списків, кожен з яких містить два цілі числа.
- Потім ми друкуємо оригінальний список за допомогою функції print() і str(), щоб перетворити список на рядок для друку.
- Ми використовуємо розуміння списку з функцією sorted() для сортування кожного підсписку в test_list на основі елементів у кожному підсписку.
- Ми присвоюємо отриманий відсортований список списків змінній res.
- Нарешті, ми друкуємо отриманий відсортований список res за допомогою функції print() і str(), щоб перетворити список на рядок для друку.
Python3
# Python3 code to demonstrate> # Sorting list of lists with similar list elements> # using list comprehension + sorted()> # initializing list> test_list>=> [[[>4>,>4>], [>1>,>1>]], [[>3>,>3>], [>2>,>2>], [>5>,>5>]]]> # printing original list> print>(>'The original list : '> +> str>(test_list))> # using list comprehension + sorted()> # Sorting list of lists with similar list elements> res>=> [>sorted>(idx)>for> idx>in> test_list]> # print result> print>(>'The list after performing sort operation : '> +> str>(res))> |
>
>Вихід:
Початковий список: [[[4, 4], [1, 1]], [[3, 3], [2, 2], [5, 5]]] Список після виконання операції сортування: [[[1 , 1], [4, 4]], [[2, 2], [3, 3], [5, 5]]]
Часова складність: O(nlogn)
Допоміжний простір: O(1)
Спосіб №2: Використання map() + sorted()
Комбінація наведених вище функцій також виконує подібне завдання, як наведений вище метод, з тією лише різницею, що функція map використовується для розширення логіки сортування на всі підсписки.
Python3
np.sum
# Python3 code to demonstrate> # Sorting list of lists with similar list elements> # using map() + sorted()> # initializing list> test_list>=> [[[>4>,>4>], [>1>,>1>]], [[>3>,>3>], [>2>,>2>], [>5>,>5>]]]> # printing original list> print>(>'The original list : '> +> str>(test_list))> # using map() + sorted()> # Sorting list of lists with similar list elements> res>=> list>(>map>(>sorted>, test_list))> # print result> print>(>'The list after performing sort operation : '> +> str>(res))> |
>
>Вихід:
Початковий список: [[[4, 4], [1, 1]], [[3, 3], [2, 2], [5, 5]]] Список після виконання операції сортування: [[[1 , 1], [4, 4]], [[2, 2], [3, 3], [5, 5]]]
Часова складність: O(n*nlogn), де n – кількість елементів у списку test_list.
Допоміжний простір: O(n), де n — кількість елементів у списку test_list.
Спосіб 3: використання лямбда-функції з методом sort().
Підхід:
- Ініціалізуйте список test_list зразками даних.
- Роздрукуйте вихідний список за допомогою функції print().
- Для сортування списку списків використовуйте метод sort(). Ключовим параметром є лямбда-функція, яка сортує кожен елемент списку.
- Надрукуйте відсортований список за допомогою функції print().
Нижче наведено реалізацію вищезазначеного підходу:
Python3
# Python3 code to demonstrate> # Sorting list of lists with similar list elements> # using lambda function and sort()> # initializing list> test_list>=> [[[>4>,>4>], [>1>,>1>]], [[>3>,>3>], [>2>,>2>], [>5>,>5>]]]> # printing original list> print>(>'The original list : '> +> str>(test_list))> # using lambda function and sort()> # Sorting list of lists with similar list elements> test_list.sort(key>=>lambda> x:>sorted>(x))> # print result> print>(>'The list after performing sort operation : '> +> str>(test_list))> |
>
>Вихід
The original list : [[[4, 4], [1, 1]], [[3, 3], [2, 2], [5, 5]]] The list after performing sort operation : [[[4, 4], [1, 1]], [[3, 3], [2, 2], [5, 5]]]>
Часова складність: O(n log n), де n – кількість елементів у списку.
Допоміжні приміщення: O(1), оскільки він не використовує додаткового місця, окрім списку введення.
Спосіб №4: Використання functools.cmp_to_key()
- Імпортуйте модуль functools.
- Визначте функцію порівняння, яка приймає два підсписки як аргументи та повертає -1, 0 або 1 залежно від їхнього відносного порядку.
- Використовуйте функцію sorted() і cmp_to_key() із functools, щоб відсортувати вихідний список за допомогою функції порівняння.
Python3
регулярний вираз Java $
# Python3 code to demonstrate> # Sorting list of lists with similar list elements> # using functools.cmp_to_key()> # import functools module> import> functools> # initializing list> test_list>=> [[[>4>,>4>], [>1>,>1>]], [[>3>,>3>], [>2>,>2>], [>5>,>5>]]]> # printing original list> print>(>'The original list : '> +> str>(test_list))> # define comparison function> def> compare_lists(list1, list2):> >if> sorted>(list1) <>sorted>(list2):> >return> ->1> >elif> sorted>(list1)>>sorted>(list2):> >return> 1> >else>:> >return> 0> # using functools.cmp_to_key() and sorted()> # Sorting list of lists with similar list elements> test_list.sort(key>=>functools.cmp_to_key(compare_lists))> # print result> print>(>'The list after performing sort operation : '> +> str>(test_list))> |
>
>Вихід
The original list : [[[4, 4], [1, 1]], [[3, 3], [2, 2], [5, 5]]] The list after performing sort operation : [[[4, 4], [1, 1]], [[3, 3], [2, 2], [5, 5]]]>
Часова складність: O(N * M * log(M)), де N — кількість підсписків, а M — довжина найдовшого підсписку.
Допоміжний простір: O(M) , де M — довжина найдовшого підсписку для операції сортування.