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)> |
slovník c#
>
>
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
ubuntu build nevyhnutné
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> |
gb vs mb
>
>
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.
k najbližšiemu susedovi
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