Nestede listeforståelser i Python

Listeforståelse er en av de mest fantastiske funksjonene til Python . Det er en smart og kortfattet måte å lage lister ved å iterere over et gjentakbart objekt. Nestede listeforståelser er ikke annet enn en listeforståelse innenfor en annen listeforståelse som er ganske lik nestet for looper.

Nestet listeforståelse i Python-syntaks

Nedenfor er syntaksen til nestet listeforståelse :

Syntaks: new_list = [[uttrykk for element i liste] for element i liste]

Parametere:

  • Uttrykk : Uttrykk som brukes til å endre hvert element i setningen
  • Punkt: Elementet i det iterable
  • Liste: Et gjentakelig objekt

Eksempler på forståelse av Python Nested List

Nedenfor er noen eksempler på forståelse av nestede lister:

Eksempel 1: Opprette en matrise

I dette eksemplet skal vi sammenligne hvordan vi kan lage en matrise når vi lager det med

Uten listeforståelse

I dette eksemplet opprettes en 5×5-matrise ved hjelp av en nestet sløyfestruktur. En ytre løkke itererer fem ganger, og legger til tomme underlister til matrix> , mens en indre sløyfe fyller ut hver underliste med verdier fra 0 til 4, noe som resulterer i en matrise med påfølgende heltallsverdier.

Python3




matrix> => []> for> i> in> range> (> 5> ):> > # Append an empty sublist inside the list> > matrix.append([])> > for> j> in> range> (> 5> ):> > matrix[i].append(j)> print> (matrix)>

Produksjon

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]] 

Bruke listeforståelse

Det samme resultatet kan oppnås ved å bruke nestet listeforståelse på bare én linje. I dette eksemplet genereres en 5×5-matrise ved hjelp av en nestet listeforståelse. Den ytre forståelsen itererer fem ganger, og representerer radene, mens den indre forståelsen fyller hver rad med verdier fra 0 til 4, noe som resulterer i en matrise med påfølgende heltallsverdier.

Python3




# Nested list comprehension> matrix> => [[j> for> j> in> range> (> 5> )]> for> i> in> range> (> 5> )]> print> (matrix)>

Produksjon

[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]] 

Eksempel 2: Filtrering av en nestet liste ved å bruke listeforståelse

Her vil vi se hvordan vi kan filtrere en liste med og uten å bruke listeforståelse.

Uten å bruke listeforståelse

I dette eksemplet krysser en nestet sløyfe en 2D-matrise, trekker ut oddetall fra Python-listen i listen og legger dem til listen odd_numbers> . Den resulterende listen inneholder alle odde elementer fra matrisen.

Python3




matrix> => [[> 1> ,> 2> ,> 3> ], [> 4> ,> 5> ,> 6> ], [> 7> ,> 8> ,> 9> ]]> odd_numbers> => []> for> row> in> matrix:> > for> element> in> row:> > if> element> %> 2> !> => 0> :> > odd_numbers.append(element)> print> (odd_numbers)>

Produksjon

[1, 3, 5, 7, 9] 

Bruke listeforståelse

I dette eksemplet brukes en listeforståelse for å kortfattet generere listen odd_numbers> ved å iterere gjennom elementene i en 2D-matrise. Bare odde elementer er inkludert i den resulterende listen, og gir et kortfattet og lesbart alternativ til den tilsvarende nestede løkkestrukturen.

Python3




matrix> => [[> 1> ,> 2> ,> 3> ], [> 4> ,> 5> ,> 6> ], [> 7> ,> 8> ,> 9> ]]> odd_numbers> => [> > element> for> row> in> matrix> for> element> in> row> if> element> %> 2> !> => 0> ]> print> (odd_numbers)>

Produksjon

[1, 3, 5, 7, 9] 

Eksempel 3: Flatting av nestede underlister

Uten listeforståelse

I dette eksemplet heter en 2D-liste matrix> med varierende underlistelengder flates ut ved hjelp av nestede løkker. Elementene fra hver underliste legges sekvensielt til listen flatten_matrix> , noe som resulterer i en utflatet representasjon av den opprinnelige matrisen.

Python3




# 2-D List> matrix> => [[> 1> ,> 2> ,> 3> ], [> 4> ,> 5> ], [> 6> ,> 7> ,> 8> ,> 9> ]]> flatten_matrix> => []> for> sublist> in> matrix:> > for> val> in> sublist:> > flatten_matrix.append(val)> print> (flatten_matrix)>

Produksjon

[1, 2, 3, 4, 5, 6, 7, 8, 9] 

Med listeforståelse

Igjen kan dette gjøres ved å bruke nestet listeforståelse som er vist nedenfor. I dette eksemplet heter en 2D-liste matrix> med varierende underlistelengder flates ut ved hjelp av nestet listeforståelse. Uttrykket [val for sublist in matrix for val in sublist]> genererer kortfattet en sammenslått liste ved å inkludere hvert element fra underlistene sekvensielt.

Python3




# 2-D List> matrix> => [[> 1> ,> 2> ,> 3> ], [> 4> ,> 5> ], [> 6> ,> 7> ,> 8> ,> 9> ]]> # Nested List Comprehension to flatten a given 2-D matrix> flatten_matrix> => [val> for> sublist> in> matrix> for> val> in> sublist]> print> (flatten_matrix)>

Produksjon

[1, 2, 3, 4, 5, 6, 7, 8, 9] 

Eksempel 4: Manipuler streng ved å bruke listeforståelse

Uten listeforståelse

I dette eksemplet heter en 2D-liste matrix> som inneholder strenger er modifisert ved å bruke nestet løkker . Den indre løkken setter den første bokstaven i hver frukt med stor bokstav, og den ytre løkken konstruerer en ny 2D-liste, modified_matrix> , med fruktene med store bokstaver, noe som resulterer i en matrise av strenger med innledende store bokstaver.

Python3




matrix> => [[> 'apple'> ,> 'banana'> ,> 'cherry'> ],> > [> 'date'> ,> 'fig'> ,> 'grape'> ],> > [> 'kiwi'> ,> 'lemon'> ,> 'mango'> ]]> modified_matrix> => []> for> row> in> matrix:> > modified_row> => []> > for> fruit> in> row:> > modified_row.append(fruit.capitalize())> > modified_matrix.append(modified_row)> print> (modified_matrix)>

Produksjon

[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']] 

Med listeforståelse

I dette eksemplet heter en 2D-liste matrix> som inneholder strenger, transformeres ved hjelp av nestet listeforståelse. Uttrykket [[fruit.capitalize() for fruit in row] for row in matrix]> genererer effektivt en modifisert matrise der den første bokstaven i hver frukt er stor, noe som resulterer i en ny matrise av strenger med store bokstaver.

Python3




matrix> => [[> 'apple'> ,> 'banana'> ,> 'cherry'> ],> > [> 'date'> ,> 'fig'> ,> 'grape'> ],> > [> 'kiwi'> ,> 'lemon'> ,> 'mango'> ]]> modified_matrix> => [[fruit.capitalize()> for> fruit> in> row]> for> row> in> matrix]> print> (modified_matrix)>

Produksjon

[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]