logo

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 :



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']]>