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:

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