logo

Indlejrede listeforståelser i Python

Listeforståelse er en af ​​de mest fantastiske funktioner ved Python . Det er en smart og kortfattet måde at oprette lister ved at iterere over et iterbart objekt. Indlejrede listeforståelser er intet andet end en listeforståelse inden for en anden listeforståelse, som er ret lig indlejret for sløjfer.

Indlejret listeforståelse i Python-syntaks

Nedenfor er syntaksen for indlejret listeforståelse :



arrays i java

Syntaks: new_list = [[udtryk for punkt på liste] for punkt på liste]

Parametre:

  • Udtryk : Udtryk, der bruges til at ændre hvert element i sætningen
  • Vare: Elementet i det iterable
  • Liste: Et iterabelt objekt

Eksempler på Python-indlejrede listeforståelser

Nedenfor er nogle eksempler på indlejret listeforståelse:



Eksempel 1: Oprettelse af en matrix

I dette eksempel vil vi sammenligne, hvordan vi kan lave en matrix når vi skaber det med

Uden Listeforståelse

I dette eksempel oprettes en 5×5 matrix ved hjælp af en indlejret sløjfestruktur. En ydre løkke itererer fem gange og tilføjer tomme underlister tilmatrix>, mens en indre sløjfe udfylder hver underliste med værdier fra 0 til 4, hvilket resulterer i en matrix med på hinanden følgende heltalsværdier.



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)>

>

>

Produktion

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

Brug af listeforståelse

Det samme output kan opnås ved hjælp af indlejret listeforståelse på kun én linje. I dette eksempel genereres en 5×5 matrix ved hjælp af en indlejret listeforståelse. Den ydre forståelse itererer fem gange, hvilket repræsenterer rækkerne, mens den indre forståelse udfylder hver række med værdier fra 0 til 4, hvilket resulterer i en matrix med på hinanden følgende heltalsværdier.

Python3




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

>

>

Produktion

[[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 af en indlejret liste ved hjælp af listeforståelse

Her vil vi se, hvordan vi kan filtrere en liste med og uden at bruge listeforståelse.

Uden at bruge listeforståelse

I dette eksempel krydser en indlejret sløjfe en 2D-matrix, udtrækker ulige tal fra Python-listen i listen og føjer dem til listenodd_numbers>. Den resulterende liste indeholder alle ulige elementer fra matrixen.

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)>

>

>

Produktion

[1, 3, 5, 7, 9]>

Brug af listeforståelse

I dette eksempel bruges en listeforståelse til kortfattet at generere listenodd_numbers>ved at iterere gennem elementerne i en 2D-matrix. Kun ulige elementer er inkluderet i den resulterende liste, hvilket giver et kortfattet og læsbart alternativ til den tilsvarende indlejrede sløjfestruktur.

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)>

>

>

Produktion

[1, 3, 5, 7, 9]>

Eksempel 3: Udfladning af indlejrede underlister

Uden Listeforståelse

I dette eksempel hedder en 2D-listematrix>med varierende underlistelængder udflades ved hjælp af indlejrede løkker. Elementerne fra hver underliste føjes sekventielt til listenflatten_matrix>, hvilket resulterer i en fladtrykt repræsentation af den oprindelige matrix.

latex liste

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)>

>

>

Produktion

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

Med Listeforståelse

Igen kan dette gøres ved hjælp af indlejret listeforståelse, som er vist nedenfor. I dette eksempel hedder en 2D-listematrix>med varierende underlistelængder udjævnes ved hjælp af indlejret listeforståelse. Udtrykket[val for sublist in matrix for val in sublist]>genererer kort og godt en fladtrykt liste ved sekventielt at inkludere hvert element fra underlisterne.

Python3




streng til int i 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)>

>

>

Produktion

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

Eksempel 4: Manipuler streng ved hjælp af listeforståelse

Uden Listeforståelse

I dette eksempel hedder en 2D-listematrix>indeholdende strenge ændres ved hjælp af indlejrede sløjfer . Den indre løkke sætter det første bogstav i hver frugt med stort, og den ydre løkke konstruerer en ny 2D-liste,modified_matrix>, med de store frugter, hvilket resulterer i en matrix af strenge med indledende store bogstaver.

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)>

>

>

Produktion

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

Med Listeforståelse

I dette eksempel hedder en 2D-listematrix>indeholdende strenge transformeres ved hjælp af indlejret listeforståelse. Udtrykket[[fruit.capitalize() for fruit in row] for row in matrix]>genererer effektivt en modificeret matrix, hvor det første bogstav i hver frugt er stort, hvilket resulterer i en ny matrix af strenge med indledende store bogstaver.

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)>

>

>

Produktion

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