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:
- Pomocou Flatten List porozumenie zoznamu
- Pomocou Flatten List suma()
- Pomocou Flatten List slučka
- Pomocou Flatten List metóda flatten().
- Pomocou Flatten List reťaz () s isinstance()
- Pomocou Flatten List znížiť () funkciu
- Zlúčiť zoznam pomocou groupby
- Pomocou Flatten List itertools.chain.from_iterable()
- Flatten List pomocou rekurzie
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