Triedenie bolo vždy kľúčovou operáciou, ktorá sa vykonáva pre mnoho aplikácií a tiež ako vedľajší problém mnohých problémov. Diskutovalo sa o mnohých variáciách a technikách a ich znalosti môžu byť užitočné pri programovaní. Tento článok pojednáva o triedení zoznamov obsahujúcich zoznam. Poďme diskutovať o určitých spôsoboch, ako to možno vykonať.
Metóda č. 1: Použitie zoradené () + pochopenie zoznamu
V tejto metóde používame iba skratku dlhého procesu, ktorý je možné použiť. Zoznam sa iteruje a nasledujúci podzoznam sa triedi pomocou funkcie triedenia, ktorá triedi aj vnútorný zoznam.
„aký je rozdiel medzi levom a tigrom“
Krok b krokový prístup:
- Začneme inicializáciou vnoreného zoznamu test_list obsahujúceho dva podzoznamy, z ktorých každý obsahuje iný počet zoznamov, z ktorých každý obsahuje dve celé čísla.
- Potom vytlačíme pôvodný zoznam pomocou funkcie print() a funkcie str() na konverziu zoznamu na reťazec pre účely tlače.
- Na zoradenie každého podzoznamu v testovacom_zozname na základe prvkov v každom podzozname používame porozumenie zoznamu pomocou funkcie sort().
- Výsledný zoradený zoznam zoznamov priradíme premennej res.
- Nakoniec vytlačíme výsledný zoradený zoznam res pomocou funkcie print() a funkcie str() na konverziu zoznamu na reťazec pre účely tlače.
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ýkon :
Pôvodný zoznam: [[[4, 4], [1, 1]], [[3, 3], [2, 2], [5, 5]]] Zoznam po vykonaní operácie zoradenia: [[[1] , 1], [4, 4]], [[2, 2], [3, 3], [5, 5]]]
Časová zložitosť: O(nlogn)
Pomocný priestor: O(1)
Metóda č. 2: Použitie map() + sorted()
Kombinácia vyššie uvedených funkcií tiež vykonáva podobnú úlohu ako vyššie uvedená metóda, len s tým rozdielom, že mapová funkcia sa používa na rozšírenie logiky triedenia na celé podzoznamy.
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))> |
>
>Výkon :
Pôvodný zoznam: [[[4, 4], [1, 1]], [[3, 3], [2, 2], [5, 5]]] Zoznam po vykonaní operácie zoradenia: [[[1] , 1], [4, 4]], [[2, 2], [3, 3], [5, 5]]]
Časová zložitosť: O(n*nlogn), kde n je počet prvkov v zozname test_list.
Pomocný priestor: O(n), kde n je počet prvkov v zozname test_list.
Metóda 3: Použitie funkcie lambda s metódou sort().
Prístup:
- Inicializujte zoznam test_list so vzorovými údajmi.
- Vytlačte pôvodný zoznam pomocou funkcie print().
- Na zoradenie zoznamu zoznamov použite metódu sort(). Kľúčový parameter je nastavený na funkciu lambda, ktorá triedi každý prvok zoznamu.
- Vytlačte zoradený zoznam pomocou funkcie print().
Nižšie je uvedená implementácia vyššie uvedeného prístupu:
bash rozdeliť reťazec oddeľovačom
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ýkon
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á zložitosť: O(n log n), kde n je počet prvkov v zozname.
Pomocný priestor: O(1), pretože okrem zoznamu vstupov nepoužíva žiadne ďalšie miesto.
Metóda #4: Použitie functools.cmp_to_key()
- Importujte modul functools.
- Definujte porovnávaciu funkciu, ktorá berie dva podzoznamy ako argumenty a vracia -1, 0 alebo 1 v závislosti od ich relatívneho poradia.
- Na zoradenie pôvodného zoznamu pomocou funkcie porovnávania použite funkciu sort() a funkciu cmp_to_key() z functools.
Python3
polymorfizmus v jave
# 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ýkon
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á zložitosť: O(N * M * log(M)), kde N je počet podzoznamov a M je dĺžka najdlhšieho podzoznamu.
Pomocný priestor: O(M) , kde M je dĺžka najdlhšieho podzoznamu pre operáciu triedenia.