Třídění bylo vždy klíčovou operací, která se provádí pro mnoho aplikací a také jako dílčí problém mnoha problémů. Bylo diskutováno mnoho variant a technik a jejich znalost může být užitečná při programování. Tento článek pojednává o řazení seznamů obsahujících seznam. Pojďme diskutovat o určitých způsobech, jak to lze provést.
Metoda č. 1 : Použití sorted() + porozumění seznamu
V této metodě používáme pouze zkratku dlouhého procesu, který lze použít. Seznam se iteruje a následný podseznam se třídí pomocí funkce třídění, která třídí i vnitřní seznam.
jak zkontrolovat velikost obrazovky monitoru
Krok b krokový přístup:
- Začneme inicializací vnořeného seznamu test_list obsahujícího dva podseznamy, z nichž každý obsahuje jiný počet seznamů, z nichž každý obsahuje dvě celá čísla.
- Poté vytiskneme původní seznam pomocí funkce print() a funkce str() pro převedení seznamu na řetězec pro účely tisku.
- K seřazení každého podseznamu v test_listu na základě prvků v každém podseznamu používáme porozumění seznamu pomocí funkce sort().
- Výsledný seřazený seznam seznamů přiřadíme proměnné res.
- Nakonec vytiskneme výsledný seřazený seznam res pomocí funkce print() a funkce str() pro převod seznamu na řetězec pro účely tisku.
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))> |
>
>Výstup :
Původní seznam: [[[4, 4], [1, 1]], [[3, 3], [2, 2], [5, 5]]] Seznam po provedení operace řazení: [[[1] , 1], [4, 4]], [[2, 2], [3, 3], [5, 5]]]
Časová složitost: O(nlogn)
Pomocný prostor: O(1)
Metoda č. 2: Použití map() + sorted()
Kombinace výše uvedených funkcí také provádí podobný úkol jako výše uvedená metoda, jen s tím rozdílem, že mapová funkce se používá k rozšíření logiky řazení na celé podseznamy.
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))> |
>
celé číslo na řetězec
>Výstup :
Původní seznam: [[[4, 4], [1, 1]], [[3, 3], [2, 2], [5, 5]]] Seznam po provedení operace řazení: [[[1] , 1], [4, 4]], [[2, 2], [3, 3], [5, 5]]]
Časová složitost: O(n*nlogn), kde n je počet prvků v seznamu test_list.
Pomocný prostor: O(n), kde n je počet prvků v seznamu test_list.
Metoda 3: Použití funkce lambda s metodou sort().
Přístup:
- Inicializujte seznam test_list s ukázkovými daty.
- Vytiskněte původní seznam pomocí funkce print().
- K seřazení seznamu seznamů použijte metodu sort(). Klíčový parametr je nastaven na funkci lambda, která třídí každý prvek seznamu.
- Vytiskněte setříděný seznam pomocí funkce print().
Níže je uvedena implementace výše uvedeného přístupu:
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))> |
>
>Výstup
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]]]>
Časová složitost: O(n log n), kde n je počet prvků v seznamu.
Pomocný prostor: O(1), protože kromě seznamu vstupů nepoužívá žádné další místo.
Metoda #4: Použití functools.cmp_to_key()
- Importujte modul functools.
- Definujte porovnávací funkci, která vezme dva podseznamy jako argumenty a vrátí -1, 0 nebo 1 v závislosti na jejich relativním pořadí.
- K seřazení původního seznamu pomocí funkce porovnání použijte funkci sort() a funkci cmp_to_key() z functools.
Python3
konstruktor v Javě
# 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))> |
>
>Výstup
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]]]>
Časová složitost: O(N * M * log(M)), kde N je počet podseznamů a M je délka nejdelšího podseznamu.
Pomocný prostor: O(M) , kde M je délka nejdelšího podseznamu pro operaci řazení.