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)> |
css-tekstin tasaus
>
>
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))> |
>
hasseuraava java
>
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> |
>
>
alamerkkijono bashissa
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)> |
>
>
muuntaa päivämäärä merkkijonoksi
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