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 :
arrays i java
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 tilmatrix>
, 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 listenodd_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 listenodd_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-listematrix>
med varierende underlistelengder flates ut ved hjelp av nestede løkker. Elementene fra hver underliste legges sekvensielt til listenflatten_matrix>
, noe som resulterer i en utflatet representasjon av den opprinnelige matrisen.
c++ delt streng
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-listematrix>
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
bytte tilfelle java
# 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-listematrix>
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-listematrix>
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']]>