logo

Python | Сортування списку списків зі схожими елементами списку

Сортування завжди було ключовою операцією, яка виконується для багатьох програм, а також як підпроблема багатьох проблем. Було обговорено багато варіантів і технік, і їх знання можуть бути корисними під час програмування. У цій статті розглядається сортування списків, які містять список. Давайте обговоримо певні способи, якими це можна зробити.

Спосіб №1: Використання sorted() + розуміння списку



У цьому методі ми просто використовуємо скорочення тривалого процесу, який можна застосувати. Список повторюється, а наступний підсписок сортується за допомогою функції sorted, яка також сортує внутрішній список.

циклічний алгоритм планування

Крок bt кроковий підхід:

  1. Ми починаємо з ініціалізації вкладеного списку test_list, що містить два підсписки, кожен з яких містить різну кількість списків, кожен з яких містить два цілі числа.
  2. Потім ми друкуємо оригінальний список за допомогою функції print() і str(), щоб перетворити список на рядок для друку.
  3. Ми використовуємо розуміння списку з функцією sorted() для сортування кожного підсписку в test_list на основі елементів у кожному підсписку.
  4. Ми присвоюємо отриманий відсортований список списків змінній res.
  5. Нарешті, ми друкуємо отриманий відсортований список 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().

Підхід:

  1. Ініціалізуйте список test_list зразками даних.
  2. Роздрукуйте вихідний список за допомогою функції print().
  3. Для сортування списку списків використовуйте метод sort(). Ключовим параметром є лямбда-функція, яка сортує кожен елемент списку.
  4. Надрукуйте відсортований список за допомогою функції 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()

  1. Імпортуйте модуль functools.
  2. Визначте функцію порівняння, яка приймає два підсписки як аргументи та повертає -1, 0 або 1 залежно від їхнього відносного порядку.
  3. Використовуйте функцію 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 — довжина найдовшого підсписку для операції сортування.