Sortowanie zawsze było kluczową operacją wykonywaną w wielu zastosowaniach, a także stanowiło podproblem wielu problemów. Omówiono wiele odmian i technik, a ich wiedza może być przydatna podczas programowania. W tym artykule omówiono sortowanie list zawierających listę. Omówmy pewne sposoby, w jakie można to zrobić.
Metoda nr 1: Użycie sorted() + zrozumienie listy
W tej metodzie używamy po prostu skrótu długiego procesu, który można zastosować. Lista jest iterowana, a kolejna podlista jest sortowana przy użyciu funkcji sorted sortującej również listę wewnętrzną.
prime bez kodu w Javie
Krok po kroku:
- Zaczynamy od zainicjowania zagnieżdżonej listy test_list zawierającej dwie podlisty, z których każda zawiera inną liczbę list, z których każda zawiera dwie liczby całkowite.
- Następnie drukujemy oryginalną listę za pomocą funkcji print() i str(), aby przekonwertować listę na ciąg znaków do celów drukowania.
- Używamy rozumienia list z funkcją sorted() do sortowania każdej podlisty w ramach test_list na podstawie elementów w każdej podliście.
- Wynikową posortowaną listę list przypisujemy do zmiennej res.
- Na koniec drukujemy wynikową posortowaną listę res, używając funkcji print() i funkcji str(), aby przekonwertować listę na ciąg znaków do celów drukowania.
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))> |
>
>Wyjście :
Oryginalna lista: [[[4, 4], [1, 1]], [[3, 3], [2, 2], [5, 5]]] Lista po wykonaniu operacji sortowania: [[[1 , 1], [4, 4]], [[2, 2], [3, 3], [5, 5]]]
Złożoność czasowa: O(nlogn)
Przestrzeń pomocnicza: O(1)
Metoda nr 2: Używanie map() + sorted()
Kombinacja powyższych funkcji również wykonuje podobne zadanie jak powyższa metoda, z tą tylko różnicą, że funkcja map służy do rozszerzenia logiki sortowania na całe podlisty.
Python3
# 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))> |
>
>Wyjście :
Oryginalna lista: [[[4, 4], [1, 1]], [[3, 3], [2, 2], [5, 5]]] Lista po wykonaniu operacji sortowania: [[[1 , 1], [4, 4]], [[2, 2], [3, 3], [5, 5]]]
Złożoność czasowa: O(n*nlogn), gdzie n jest liczbą elementów na liście lista_testowa.
Przestrzeń pomocnicza: O(n), gdzie n jest liczbą elementów na liście lista_testowa.
Metoda 3: Użycie funkcji lambda z metodą sort().
Zbliżać się:
- Zainicjuj listę test_list przykładowymi danymi.
- Wydrukuj oryginalną listę za pomocą funkcji print().
- Aby posortować listę list, użyj metody sort(). Parametr key jest ustawiony na funkcję lambda, która sortuje każdy element listy.
- Wydrukuj posortowaną listę za pomocą funkcji print().
Poniżej implementacja powyższego podejścia:
łyżeczka vs łyżka
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))> |
>
>Wyjście
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]]]>
Złożoność czasowa: O(n log n), gdzie n jest liczbą elementów na liście.
Przestrzeń pomocnicza: O(1), ponieważ nie zajmuje dodatkowej przestrzeni poza listą wejściową.
Metoda nr 4: Używanie functools.cmp_to_key()
- Zaimportuj moduł functools.
- Zdefiniuj funkcję porównawczą, która przyjmuje dwie podlisty jako argumenty i zwraca -1, 0 lub 1 w zależności od ich względnej kolejności.
- Użyj funkcji sorted() i cmp_to_key() z functools, aby posortować oryginalną listę za pomocą funkcji porównania.
Python3
mecz_preg
# 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))> |
>
>Wyjście
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]]]>
Złożoność czasowa: O(N * M * log(M)), gdzie N to liczba podlist, a M to długość najdłuższej podlisty.
Przestrzeń pomocnicza: O(M) , gdzie M jest długością najdłuższej podlisty dla operacji sortowania.