logo

Python | Řazení seznamu seznamů s podobnými prvky seznamu

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:

  1. 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.
  2. Poté vytiskneme původní seznam pomocí funkce print() a funkce str() pro převedení seznamu na řetězec pro účely tisku.
  3. 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().
  4. Výsledný seřazený seznam seznamů přiřadíme proměnné res.
  5. 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:

  1. Inicializujte seznam test_list s ukázkovými daty.
  2. Vytiskněte původní seznam pomocí funkce print().
  3. K seřazení seznamu seznamů použijte metodu sort(). Klíčový parametr je nastaven na funkci lambda, která třídí každý prvek seznamu.
  4. 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()

  1. Importujte modul functools.
  2. 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í.
  3. 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í.