Šiame straipsnyje sužinosime, kaip išlyginti sąrašų sąrašą suprantant sąrašą Python.
Kartais, dirbdami su Python sąrašu, galime susidurti su problema, kai turime atlikti sąrašo išlyginimą, ty mišrų sąrašą konvertuoti į suplotą. Tai gali turėti programų domenuose, kuriuose kaip įvestis naudojami 1D sąrašai.
Aptarkime tam tikrus šios užduoties atlikimo būdus.
Pavyzdys:
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.>
Kaip išlyginti sąrašą iki atskirų „Python“ elementų
Žemiau pateikiami metodai, kuriuos apžvelgsime skiltyje Kaip išlyginti Python sąrašų sąrašą:
- Išlyginti sąrašą naudojant sąrašo supratimas
- Išlyginti sąrašą naudojant suma()
- Išlyginti sąrašą naudojant kilpa
- Išlyginti sąrašą naudojant flatten() metodas
- Išlyginti sąrašą naudojant grandinėlė () su isinstance ()
- Išlyginti sąrašą naudojant sumažinti () funkcija
- Išlyginti sąrašą naudojant groupby
- Išlyginti sąrašą naudojant itertools.chain.from_iterable()
- Išlyginti sąrašą naudojant rekursiją
1. Sąrašo supratimo naudojimas sąrašų sąrašui išlyginti
Čia mes naudojame sąrašo supratimas kad sąrašas būtų išlygintas iš 2D į 1D.
Python3
res>=> [i>for> row>in> [[>1>,>3>,>'geeks'>], [>4>,>5>],> >[>6>,>'best'>]]>for> i>in> row]> print>(res)> |
101 mln
>
>
Išvestis:
[1, 3, 'geeks', 4, 5, 6, 'best']>
Laiko sudėtingumas: O(n) čia n yra elementų skaičius sąraše
Pagalbinė erdvė: O(n) čia n yra elementų skaičius sąraše
2. Funkcijos sum() naudojimas sąrašų sąrašui išlyginti
Čia mes naudojame sum() funkcija kuriame test_list perdavėme kaip kartotinį objektą kaip pirmąjį parametrą, o antrąjį parametrą – kaip tuščią sąrašą, kuriame saugomas elementas.
Python3
test_list>=> [[>1>,>3>,>'gfg'>], [>4>,>5>], [>6>,>'best'>]]> test_list>=> sum>(test_list, [])> print>(test_list)> |
>
>
Išvestis:
[1, 3, 'gfg', 4, 5, 6, 'best']>
Laiko sudėtingumas: O(n), kur n yra sąrašo test_list ilgis.
Pagalbinė erdvė: O(n) sukuriama papildoma n dydžio erdvė, kur n yra elementų skaičius sąraše
3. Naudojant f arba Loop to Išlyginkite sąrašų sąrašą
Šiai užduočiai atlikti galima naudoti minėtų funkcijų derinį. Čia patikriname, ar nėra sąrašo egzemplioriaus, jį išlyginame, o likusius elementus žiauriai pridedame prie sąrašo.
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))> |
>
java masyvas surūšiuotas
>
Išvestis:
The List after flattening : [‘gfg’, 1, 5, 6, ‘geeks’, 67.4, 5, ‘best’]>
Laiko sudėtingumas: šios funkcijos yra O(n), kur n yra bendras elementų skaičius įdėtame sąraše.
Erdvės sudėtingumas: Šios funkcijos reikšmė taip pat yra O(n), nes kiekvienam rekursiniam iškvietimui sukuriama nauja sąrašo temp, kad būtų išsaugotas suvienodintas subsąrašas, o galutinis išlygintas sąrašas saugomas res kintamajame.
4. Sąrašų sąrašo išlyginimui naudojant flatten() metodą
Pandos flatten() grąžina masyvo kopiją, sutrauktą į vieną matmenį.
Python3
from> pandas.core.common>import> flatten> l>=> [[>1>,>3>,>'gfg'>], [>4>,>5>], [>6>,>'best'>]]> print>(>list>(flatten(l)))> |
>
>
Išvestis:
[1, 3, 'gfg', 4, 5, 6, 'best']>
5. U dainuoti grandinę () su isinstance () išlyginti sąrašų sąrašą
Tai dar vienas būdas atlikti šią užduotį. Šiame, kurios iteracijos užduotį atliekame naudodami grandinėlė () ir tikrinti, ar nėra atvejų sąrašo , kuris atliekamas naudojant 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))> |
>
>
Išvestis:
The List after flattening : [‘gfg’, 1, 5, 6, ‘geeks’, 67.4, 5, ‘best’]>
Laiko sudėtingumas: O(n)
Pagalbinė erdvė: O(n)
6. Sąrašų sąrašo išlyginimui naudokite funkciją Reduction()
The sumažinti () funkcija apibrėžta funkcinės priemonės modulis. Ji nepertraukiamai taiko dviejų argumentų funkciją nurodytai sekai ir grąžina vieną reikšmę.
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> |
>
>
Išvestis:
The List after Flattening : [1, 3, 'gfg', 4, 5, 6, 'best']>
Laiko sudėtingumas: O(n)
Pagalbinė erdvė: O(n)
arraylist java rūšiuoti
7. Sąrašų sąrašo išlyginimas naudojant groupby
Importuoti Grupuoti pagal modulis iš iterto įrankiai . Apibrėžkite sąrašų test_list. Apibrėžkite res kintamąjį kaip tuščią sąrašą. Norėdami pakartoti testo_sąrašo elementus, naudokite įdėtą kilpą.
Kiekvienam elementui patikrinkite, ar tai sąrašas, ar ne. Jei tai sąrašas, pakartokite kiekvieną sąrašo elementą ir pridėkite jį prie kintamojo res. Jei tai nėra sąrašas, pridėkite elementą tiesiai prie kintamojo res.
Spausdinkite res kintamąjį kaip išlygintą sąrašą.
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.> |
>
>
Išvestis:
The List after flattening : [1, 3, 'gfg', 4, 5, 6, 'best']>
Laiko sudėtingumas: Kodo sudėtingumas laike yra O(n), kur n yra elementų skaičius įvesties sąraše. Įdėtas ciklas kartojasi per kiekvieną įvesties sąrašo elementą tiksliai vieną kartą.
Erdvės sudėtingumas: Kodo erdvės sudėtingumas yra O(n), kur n yra elementų skaičius įvesties sąraše. Res kintamasis naudojamas išsaugoti išlygintą sąrašą, kuriame gali būti daugiausia n elementų.
8. Naudodami itertools.chain.from_iterable() norėdami išlyginti sąrašų sąrašą
Šiame pavyzdyje toliau pateiktas kodas naudoja itertools.chain.from_iterable() būdas suploti įdėtą sąrašą.
Išskaidykime kodą ir paaiškinkime: toliau pateiktame kode naudojama „itertools.chain.from_iterable()“, kad įdėtasis sąrašas („nested_list“) būtų sujungtas į vieną sąrašą („flattened_list“), o tada išspausdinamas rezultatas.
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)> |
>
>
perbrauktas žymėjimas
Išvestis:
[1, 2, 3, 4, 5, 6, 7, 8]>
Laiko sudėtingumas: O(n)
Pagalbinė erdvė: O(n)
9. Naudojant rekursiją į Išlyginkite sąrašų sąrašą
Šiame pavyzdyje toliau pateiktas kodas apibrėžia funkciją flatten_list, kuri kaip įvestį priima įdėtą sąrašą ir grąžina suplotą sąrašą su atskirais elementais. Išlyginimas pasiekiamas naudojant rekursija .
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)> |
>
>
Išvestis:
[1, 2, 3, 4, 5, 6, 7, 8]>
Laiko sudėtingumas: O(n)
Pagalbinė erdvė: O(n)
Iš viso aptarėme 9 būdus, kaip sulyginti sąrašų sąrašą. Sąrašo išlyginimas Python naudojamas įdėtųjų sąrašų sąrašui konvertuoti į vieną sąrašą. Galite naudoti bet kurį iš aukščiau pateiktų metodų, kad suplotumėte sąrašą pagal savo poreikius.
Panašūs skaitiniai:
- Susieto sąrašo išlyginimas
- Python programa, skirta susietam sąrašui išlyginti
- Python | Sugrupuotas sąrašo išlyginimas