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:
- Pomocí Flatten List porozumění seznamu
- Pomocí Flatten List součet()
- Pomocí Flatten List smyčka
- Pomocí Flatten List metoda flatten().
- Pomocí Flatten List řetěz() s isinstance()
- Pomocí Flatten List snížit() funkce
- Sloučit seznam pomocí groupby
- Pomocí Flatten List itertools.chain.from_iterable()
- Sloučit seznam pomocí rekurze
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)> |
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
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)
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
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