logo

Python – Sloučit seznam k jednotlivým prvkům

V tomto článku se naučíme, jak sloučit seznam seznamů pomocí porozumění seznamu v Pythonu.

Někdy při práci s Pythonovým seznamem můžeme mít problém, kdy potřebujeme provést zploštění seznamu, tedy převést smíšený seznam na sloučený. To může mít aplikace v doménách, které jako vstup používají 1D seznamy.



Pojďme diskutovat o určitých způsobech, jak lze tento úkol provést.

Příklad:

  Input  : [[1,3, 'geeks'], [4,5], [6, 'best']]   Output  : [1, 3, 'geeks', 4, 5, 6, 'best']   Explaination:   Flattening convert a mixed list to a flattened one.>

Jak sloučit seznam na jednotlivé prvky v Pythonu

Níže jsou uvedeny metody, které pokryjeme v části Jak sloučit seznam seznamů v Pythonu:



1. Použití funkce List Comprehension ke sloučení seznamu seznamů

Tady, my používáme porozumění seznamu pro sloučení seznamu z 2D na 1D.

Python3






res>=> [i>for> row>in> [[>1>,>3>,>'geeks'>], [>4>,>5>],> >[>6>,>'best'>]]>for> i>in> row]> print>(res)>

prolomit mapu

>

>

Výstup:

[1, 3, 'geeks', 4, 5, 6, 'best']>

Časová náročnost: O(n) kde n je počet prvků v seznamu
Pomocný prostor: O(n) kde n je počet prvků v seznamu

2. Použití funkce sum() ke sloučení seznamu seznamů

Zde používáme funkce sum(). ve kterém jsme předali test_list jako iterovatelný objekt jako první parametr a druhý parametr jako prázdný seznam, do kterého ukládá prvek.

Python3




test_list>=> [[>1>,>3>,>'gfg'>], [>4>,>5>], [>6>,>'best'>]]> test_list>=> sum>(test_list, [])> print>(test_list)>

>

>

Výstup:

[1, 3, 'gfg', 4, 5, 6, 'best']>

Časová náročnost: O(n), kde n je délka seznamu test_list.
Pomocný prostor: O(n) je vytvořen další prostor o velikosti n, kde n je počet prvků v seznamu

3. Pomocí f nebo Loop to Zploštit seznam seznamů

K provedení tohoto úkolu lze použít kombinaci výše uvedených funkcí. V tomto zkontrolujeme instanci seznamu a sloučíme ji a zbytek prvků přidáme do seznamu brutálně.

Python3




def> flatten(test_list):> >if> isinstance>(test_list,>list>):> >temp>=> []> >for> ele>in> test_list:> >temp.extend(flatten(ele))> >return> temp> >else>:> >return> [test_list]> # Initializing list> test_list>=> [>'gfg'>,>1>, [>5>,>6>,>'geeks'>],>67.4>, [>5>],>'best'>]> # Flatten List to individual elements> # using loop + isinstance()> res>=> flatten(test_list)> > # printing result> print> (>'The List after flattening : '> +> str>(res))>

>

>

Výstup:

The List after flattening : [‘gfg’, 1, 5, 6, ‘geeks’, 67.4, 5, ‘best’]>

Časová složitost: této funkce je O(n), kde n je celkový počet prvků ve vnořeném seznamu.
Složitost prostoru: této funkce je také O(n), protože pro každé rekurzivní volání se vytvoří nový seznam temp pro uložení sloučeného podseznamu a konečný sloučený seznam se uloží do proměnné res.

4. Použití metody flatten() ke sloučení seznamu seznamů

pandy flatten() vrátí kopii pole sbalenou do jedné dimenze.

Python3

virtuální stroj java




from> pandas.core.common>import> flatten> l>=> [[>1>,>3>,>'gfg'>], [>4>,>5>], [>6>,>'best'>]]> print>(>list>(flatten(l)))>

>

>

Výstup:

[1, 3, 'gfg', 4, 5, 6, 'best']>

5. U sing chain() s isinstance() zploštit seznam seznamů

Toto je další způsob, jak lze tento úkol provést. V tomhle, který provádíme úlohu iterace pomocí řetěz() a kontrola výskytů seznamu , která se provádí pomocí isinstance() .

Python3




from> itertools>import> chain> # Initializing list> test_list>=> [>'gfg'>,>1>, [>5>,>6>,>'geeks'>],>67.4>, [>5>],>'best'>]> # Flatten List to individual elements> # using chain() + isinstance()> res>=> list>(chain(>*>[ele>if> isinstance>(ele,>list>)> >else> [ele]>for> ele>in> test_list]))> > # printing result> print> (>'The List after flattening : '> +> str>(res))>

>

>

Výstup :

The List after flattening : [‘gfg’, 1, 5, 6, ‘geeks’, 67.4, 5, ‘best’]>

Časová složitost: Na)
Pomocný prostor: Na)

převést řetězec na int

6. Použití funkce reduction() ke sloučení seznamu seznamů

The snížit() funkce je definována v functools modul. Aplikuje funkci dvou argumentů nepřetržitě na danou sekvenci a vrací jedinou hodnotu.

Python3




from> functools>import> reduce> > # Initializing list> test_list>=> [[>1>,>3>,>'gfg'>], [>4>,>5>], [>6>,>'best'>]]> > # Flatten List to individual elements> # using reduce()> res>=> reduce>(>lambda> x,y: x>+>y, test_list)> > # printing result> print> (>'The List after flattening : '> +> str>(res))> #This code is contributed by Edula Vinay Kumar Reddy>

>

>

Výstup:

The List after Flattening : [1, 3, 'gfg', 4, 5, 6, 'best']>

Časová složitost: Na)
Pomocný prostor: Na)

7. Pomocí groupby sloučit seznam seznamů

Importujte skupina vytvořená modul od itertools . Definujte testovací_seznam seznamů. Definujte proměnnou res jako prázdný seznam. Použijte vnořenou smyčku for k iteraci prvků seznamu test_list.

U každého prvku zkontrolujte, zda se jedná o seznam nebo ne. Pokud se jedná o seznam, pak iterujte každý prvek seznamu a připojte jej k proměnné res. Pokud se nejedná o seznam, přidejte prvek přímo do proměnné res.

Vytiskněte proměnnou res jako sloučený seznam.

Python3




from> itertools>import> groupby> # Initializing list> test_list>=> [[>1>,>3>,>'gfg'>], [>4>,>5>], [>6>,>'best'>]]> # Flatten List to individual elements> # using groupby()> res>=> [i>for> j>in> test_list>for> i>in> (j>if> isinstance>(j,>list>)>else> [j])]> > # printing result> print> (>'The List after flattening : '> +> str>(res))> #This code is contributed by Rayudu.>

>

>

Výstup:

The List after flattening : [1, 3, 'gfg', 4, 5, 6, 'best']>

Časová náročnost: Časová složitost kódu je O(n), kde n je počet prvků ve vstupním seznamu. Vnořená smyčka iteruje přes každý prvek seznamu vstupů přesně jednou.
Prostorová složitost: Prostorová složitost kódu je O(n), kde n je počet prvků ve vstupním seznamu. Proměnná res se používá k uložení sloučeného seznamu, který může mít maximálně n prvků.

8. Použití itertools.chain.from_iterable() ke sloučení seznamu seznamů

V tomto příkladu níže uvedený kód používá itertools.chain.from_iterable() metoda pro zploštění vnořeného seznamu.

Pojďme si kód rozebrat a vysvětlit: Níže uvedený kód používá `itertools.chain.from_iterable()` ke sloučení vnořeného seznamu (`vnořený_seznam`) do jednoho seznamu (`flattened_list`) a poté vytiskne výsledek.

Python3




from> itertools>import> chain> nested_list>=> [[>1>,>2>,>3>], [>4>,>5>], [>6>,>7>,>8>]]> flattened_list>=> list>(chain.from_iterable(nested_list))> print>(flattened_list)>

>

>

Výstup :

[1, 2, 3, 4, 5, 6, 7, 8]>

Časová složitost: Na)
Pomocný prostor: Na)

9. Použití rekurze k Zploštit seznam seznamů

V tomto příkladu níže uvedený kód definuje funkci flatten_list, která bere vnořený seznam jako vstup a vrací sloučený seznam s jednotlivými prvky. Zploštění je dosaženo pomocí rekurze .

Python3


náhodně ne v Javě



def> flatten_list(lst):> >flat_list>=> []> >for> item>in> lst:> >if> isinstance>(item,>list>):> >flat_list.extend(flatten_list(item))> >else>:> >flat_list.append(item)> >return> flat_list> nested_list>=> [[>1>,>2>,>3>], [>4>, [>5>,>6>]], [>7>,>8>]]> flattened_list>=> flatten_list(nested_list)> print>(flattened_list)>

>

>

Výstup :

[1, 2, 3, 4, 5, 6, 7, 8]>

Časová složitost: Na)
Pomocný prostor: Na)

Probrali jsme celkem 9 způsobů, jak zploštit seznam seznamů. Sloučení seznamů v Pythonu se používá k převodu seznamu vnořených seznamů na jeden seznam. K vyrovnání seznamu podle vašich požadavků můžete použít kteroukoli z výše uvedených metod.

Podobné čtení:

  • Zploštění propojeného seznamu
  • Program Python pro zploštění propojeného seznamu
  • Python | Seskupené zploštění seznamu