Python – Zlúčiť zoznam s jednotlivými prvkami

V tomto článku sa naučíme, ako zlúčiť zoznam zoznamov pomocou porozumenia zoznamu v Pythone.

Niekedy sa pri práci s Pythonovým zoznamom môžeme stretnúť s problémom, kedy potrebujeme vykonať sploštenie zoznamu, teda previesť zmiešaný zoznam na sploštený. To môže mať aplikácie v doménach, ktoré používajú 1D zoznamy ako vstup.

Poďme diskutovať o určitých spôsoboch, ako možno túto úlohu vykonať.

Prí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. 

Ako zlúčiť zoznam s jednotlivými prvkami v Pythone

Nižšie sú uvedené metódy, ktoré pokryjeme v časti Ako zlúčiť zoznam zoznamov v Pythone:

1. Použitie funkcie List Comprehension na vyrovnanie zoznamu zoznamov

Tu používame porozumenie zoznamu na vyrovnanie zoznamu z 2D na 1D.

Python3




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

Výkon:

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

Časová zložitosť: O(n) kde n je počet prvkov v zozname
Pomocný priestor: O(n) kde n je počet prvkov v zozname

2. Použitie funkcie sum() na vyrovnanie zoznamu zoznamov

Tu používame funkcia sum(). v ktorom sme odovzdali test_list ako iterovateľný objekt ako prvý parameter a druhý parameter ako prázdny zoznam, do ktorého ukladá prvok.

Python3




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

Výkon:

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

Časová zložitosť: O(n), kde n je dĺžka zoznamu test_list.
Pomocný priestor: O(n) vytvorí sa dodatočný priestor veľkosti n, kde n je počet prvkov v zozname

3. Pomocou f alebo Loop to Vyrovnajte zoznam zoznamov

Na vykonanie tejto úlohy možno použiť kombináciu vyššie uvedených funkcií. V tomto skontrolujeme inštanciu zoznamu a vyrovnáme ju a ostatné prvky pridáme do zoznamu brutálne.

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ýkon:

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

Časová zložitosť: tejto funkcie je O(n), kde n je celkový počet prvkov vo vnorenom zozname.
Zložitosť priestoru: tejto funkcie je tiež O(n), pretože pre každé rekurzívne volanie sa vytvorí nový zoznam temp na uloženie splošteného podzoznamu a konečný sploštený zoznam sa uloží do premennej res.

4. Použitie metódy flatten() na zlúčenie zoznamu zoznamov

pandy flatten() vráti kópiu poľa zbalenú do jednej dimenzie.

Python3




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

Výkon:

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

5. U sing chain() s isinstance() na vyrovnanie zoznamu zoznamov

Toto je ďalší spôsob, ako túto úlohu vykonať. V tomto, ktoré vykonávame úlohu iterácie pomocou reťaz () a kontrola výskytov zoznamu , ktorá sa vykonáva pomocou 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ýkon :

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

Časová zložitosť: O(n)
Pomocný priestor: O(n)

6. Použitie funkcie Redukovať () na vyrovnanie zoznamu zoznamov

The znížiť () funkcia je definovaná v functools modul. Na danú sekvenciu nepretržite aplikuje funkciu dvoch argumentov a vráti jednu 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ýkon:

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

Časová zložitosť: O(n)
Pomocný priestor: O(n)

7. Použitie groupby na vyrovnanie zoznamu zoznamov

Importovať groupby modul od itertools . Definujte testovací_zoznam zoznamov. Definujte premennú res ako prázdny zoznam. Použite vnorený cyklus for na iteráciu prvkov testovacieho zoznamu.

Pri každom prvku skontrolujte, či ide o zoznam alebo nie. Ak ide o zoznam, potom iterujte každý prvok zoznamu a pripojte ho k premennej res. Ak to nie je zoznam, pridajte prvok priamo do premennej res.

Vytlačte premennú res ako sploštený zoznam.

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ýkon:

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

Časová zložitosť: Časová zložitosť kódu je O(n), kde n je počet prvkov vo vstupnom zozname. Vnorená slučka iteruje cez každý prvok vstupného zoznamu presne raz.
Priestorová zložitosť: Priestorová zložitosť kódu je O(n), kde n je počet prvkov vo vstupnom zozname. Premenná res sa používa na uloženie splošteného zoznamu, ktorý môže mať najviac n prvkov.

8. Použitie itertools.chain.from_iterable() na vyrovnanie zoznamu zoznamov

V tomto príklade nižšie uvedený kód používa itertools.chain.from_iterable() metóda na vyrovnanie vnoreného zoznamu.

Poďme si kód rozobrať a vysvetliť: Nižšie uvedený kód používa `itertools.chain.from_iterable()` na zlúčenie vnoreného zoznamu (`vnorený_zoznam`) do jedného zoznamu (`flattened_list`) a potom vytlačí výsledok.

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ýkon :

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

Časová zložitosť: O(n)
Pomocný priestor: O(n)

9. Použitie rekurzie na Vyrovnajte zoznam zoznamov

V tomto príklade nižšie uvedený kód definuje funkciu flatten_list, ktorá berie ako vstup vnorený zoznam a vracia sploštený zoznam s jednotlivými prvkami. Sploštenie sa dosiahne pomocou rekurzia .

Python3




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ýkon :

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

Časová zložitosť: O(n)
Pomocný priestor: O(n)

Pokryli sme celkovo 9 spôsobov, ako sploštiť zoznam zoznamov. Slučovanie zoznamov v Pythone sa používa na konverziu zoznamu vnorených zoznamov na jeden zoznam. Na vyrovnanie zoznamu podľa svojich požiadaviek môžete použiť ktorúkoľvek z vyššie uvedených metód.

Podobné čítanie:

  • Sploštenie prepojeného zoznamu
  • Program Python na sploštenie prepojeného zoznamu
  • Python | Zoskupené sploštenie zoznamu