Python – Litistä luettelo yksittäisiin elementteihin
Tässä artikkelissa opimme litistämään luetteloluetteloa Pythonin luetteloiden ymmärtämisen avulla.
Joskus Python-listan kanssa työskennellessämme voi tulla ongelma, jossa meidän on suoritettava listan litistys eli muunnettava sekalista litistetyksi. Tällä voi olla sovelluksia toimialueissa, jotka käyttävät 1D-luetteloita syötteenä.
Keskustellaan tietyistä tavoista, joilla tämä tehtävä voidaan suorittaa.
Esimerkki:
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.
Kuinka litistää luettelo yksittäisiin elementteihin Pythonissa
Alla on menetelmät, joita käsittelemme artikkelissa Pythonin luetteloluettelon litistäminen:
- Litistä luettelo käyttämällä listan ymmärtäminen
- Litistä luettelo käyttämällä summa()
- Litistä luettelo käyttämällä silmukka
- Litistä luettelo käyttämällä flatten() -menetelmä
- Litistä luettelo käyttämällä ketju() kanssa isinstance()
- Litistä luettelo käyttämällä vähentää() toiminto
- Tasoita luettelo käyttämällä groupbyä
- Litistä luettelo käyttämällä itertools.chain.from_iterable()
- Tasoita luettelo rekursiolla
1. Listan ymmärtäminen litistääksesi luettelot
Tässä meillä on käytössä listan ymmärtäminen litistääksesi luettelon 2D:stä 1D:ksi.
Python 3
res> => [i> for> row> in> [[> 1> ,> 3> ,> 'geeks'> ], [> 4> ,> 5> ],> > [> 6> ,> 'best'> ]]> for> i> in> row]> print> (res)> |
Lähtö:
[1, 3, 'geeks', 4, 5, 6, 'best']
Aika monimutkaisuus: O(n) missä n on luettelon elementtien lukumäärä
Aputila: O(n) missä n on luettelon elementtien lukumäärä
2. Sum()-funktion käyttö litistääksesi listaluettelon
Tässä käytämme summa()-funktio jossa välitimme test_list iteroitavana objektina ensimmäisenä parametrina ja toisen parametrin tyhjänä luettelona, johon se tallentaa elementin.
Python 3
test_list> => [[> 1> ,> 3> ,> 'gfg'> ], [> 4> ,> 5> ], [> 6> ,> 'best'> ]]> test_list> => sum> (test_list, [])> print> (test_list)> |
Lähtö:
[1, 3, 'gfg', 4, 5, 6, 'best']
Aika monimutkaisuus: O(n), missä n on listan testi_lista pituus.
Aputila: O(n) luodaan lisätila, jonka koko on n, missä n on listan elementtien lukumäärä
3. Käyttämällä f tai Loop to Litistä luettelo luetteloista
Yllä olevien toimintojen yhdistelmää voidaan käyttää tämän tehtävän suorittamiseen. Tässä tarkistamme luettelon esiintymän ja tasoitamme sen, ja loput elementit lisäämme luetteloon raa'asti.
Python 3
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))> |
Lähtö:
The List after flattening : [‘gfg’, 1, 5, 6, ‘geeks’, 67.4, 5, ‘best’]
Aika monimutkaisuus: Tämän funktion arvo on O(n), missä n on sisäkkäisen luettelon elementtien kokonaismäärä.
Avaruuden monimutkaisuus: Tämän funktion arvo on myös O(n), koska jokaiselle rekursiiviselle kutsulle luodaan uusi listan temp litteän aliluettelon tallentamiseksi, ja lopullinen litteä lista tallennetaan res-muuttujaan.
4. Käytä flatten()-metodia litistääksesi listaluettelon
Pandat flatten() palauttaa kopion taulukosta tiivistettynä yhteen ulottuvuuteen.
Python 3
from> pandas.core.common> import> flatten> l> => [[> 1> ,> 3> ,> 'gfg'> ], [> 4> ,> 5> ], [> 6> ,> 'best'> ]]> print> (> list> (flatten(l)))> |
Lähtö:
[1, 3, 'gfg', 4, 5, 6, 'best']
5. U laula ketju() ja isinstance() litistääksesi luetteloluettelon
Tämä on jälleen yksi tapa, jolla tämä tehtävä voidaan suorittaa. Tässä, joka suoritamme iterointitehtävän käyttämällä ketju() ja tarkistamalla luetteloinstanssit , joka tehdään käyttämällä isinstance() .
Python 3
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))> |
Lähtö:
The List after flattening : [‘gfg’, 1, 5, 6, ‘geeks’, 67.4, 5, ‘best’]
Aika monimutkaisuus: Päällä)
Aputila: Päällä)
6. Listaluettelon tasoittaminen funktiolla vähennys()
The vähentää() toiminto on määritelty kohdassa toiminnalliset työkalut moduuli. Se soveltaa kahden argumentin funktiota jatkuvasti annettuun sekvenssiin ja palauttaa yhden arvon.
Python 3
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> |
Lähtö:
The List after Flattening : [1, 3, 'gfg', 4, 5, 6, 'best']
Aika monimutkaisuus: Päällä)
Aputila: Päällä)
7. Groupby:n käyttäminen listaluettelon litistämiseen
Tuo groupby moduuli alkaen itert-työkalut . Määritä luettelojen test_list. Määritä res-muuttuja tyhjäksi listaksi. Käytä sisäkkäistä silmukkaa toistaaksesi test_list-luettelon elementtejä.
Tarkista jokaisen elementin kohdalla, onko se luettelo vai ei. Jos se on luettelo, toista luettelon jokainen elementti ja liitä se res-muuttujaan. Jos se ei ole luettelo, lisää elementti suoraan res-muuttujaan.
Tulosta res-muuttuja litteänä luettelona.
Python 3
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.> |
Lähtö:
The List after flattening : [1, 3, 'gfg', 4, 5, 6, 'best']
Aika monimutkaisuus: Koodin aikamonimutkaisuus on O(n), missä n on syöttöluettelon elementtien lukumäärä. Sisäkkäinen silmukka toistuu syöteluettelon jokaisen elementin yli täsmälleen kerran.
Tilan monimutkaisuus: Koodin tilamonimutkaisuus on O(n), missä n on syöteluettelon elementtien lukumäärä. Res-muuttujaa käytetään litteän listan tallentamiseen, jossa voi olla enintään n elementtiä.
8. Listaluettelon litistäminen käyttämällä itertools.chain.from_iterable()
Tässä esimerkissä alla oleva koodi käyttää itertools.chain.from_iterable() menetelmä litistää sisäkkäinen luettelo.
Puretaan koodi ja selitetään: Alla oleva koodi käyttää 'itertools.chain.from_iterable()'-komentoa litistämään sisäkkäisen luettelon ('nested_list') yhdeksi luetteloksi ('flattened_list') ja tulostaa sitten tuloksen.
Python 3
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)> |
Lähtö:
[1, 2, 3, 4, 5, 6, 7, 8]
Aika monimutkaisuus: Päällä)
Aputila: Päällä)
9. Rekursion käyttö kohteeseen Litistä luettelo luetteloista
Tässä esimerkissä alla oleva koodi määrittää funktion flatten_list, joka ottaa syötteeksi sisäkkäisen luettelon ja palauttaa litteän luettelon yksittäisillä elementeillä. Tasoitus saadaan aikaan käyttämällä rekursio .
Python 3
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)> |
Lähtö:
[1, 2, 3, 4, 5, 6, 7, 8]
Aika monimutkaisuus: Päällä)
Aputila: Päällä)
Olemme käsitelleet yhteensä 9 tapaa litistää luetteloita. Pythonin listan litistystä käytetään sisäkkäisten luetteloiden muuntamiseen yhdeksi luetteloksi. Voit käyttää mitä tahansa yllä olevista tavoista litistääksesi luettelosi tarpeidesi mukaan.
Samanlaisia lukemia:
- Linkitetyn luettelon tasoittaminen
- Python-ohjelma linkitetyn luettelon tasoittamiseksi
- Python | Ryhmitetty Listan tasoitus