logo

Python | Triediaci zoznam zoznamov s podobnými prvkami zoznamu

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:

  1. 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.
  2. Potom vytlačíme pôvodný zoznam pomocou funkcie print() a funkcie str() na konverziu zoznamu na reťazec pre účely tlače.
  3. Na zoradenie každého podzoznamu v testovacom_zozname na základe prvkov v každom podzozname používame porozumenie zoznamu pomocou funkcie sort().
  4. Výsledný zoradený zoznam zoznamov priradíme premennej res.
  5. 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:

  1. Inicializujte zoznam test_list so vzorovými údajmi.
  2. Vytlačte pôvodný zoznam pomocou funkcie print().
  3. Na zoradenie zoznamu zoznamov použite metódu sort(). Kľúčový parameter je nastavený na funkciu lambda, ktorá triedi každý prvok zoznamu.
  4. 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()

  1. Importujte modul functools.
  2. Definujte porovnávaciu funkciu, ktorá berie dva podzoznamy ako argumenty a vracia -1, 0 alebo 1 v závislosti od ich relatívneho poradia.
  3. 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.