Listförståelse är en av de mest fantastiska funktionerna i Pytonorm . Det är ett smart och kortfattat sätt att skapa listor genom att iterera över ett itererbart objekt. Kapslade listförståelse är inget annat än en listförståelse inom en annan listförståelse som är ganska lik kapslad för loopar.
Kapslad listaförståelse i Python-syntax
Nedan visas syntaxen för kapslade listförståelse :
Syntax: new_list = [[uttryck för objekt i listan] för objekt i listan]
Parametrar:
- Uttryck : Uttryck som används för att modifiera varje objekt i satsen
- Artikel: Elementet i det iterbara
- Lista: Ett iterabelt objekt
Python kapslade listförståelseexempel
Nedan följer några exempel på förståelse av kapslade listor:
Exempel 1: Skapa en matris
I det här exemplet kommer vi att jämföra hur vi kan skapa en matris när vi skapar det med
Utan Listförståelse
I det här exemplet skapas en 5×5-matris med hjälp av en kapslad loopstruktur. En yttre slinga itererar fem gånger och lägger till tomma underlistor tillmatrix>
, medan en inre slinga fyller varje underlista med värden från 0 till 4, vilket resulterar i en matris med på varandra följande heltalsvärden.
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]]>
Använda listförståelse
Samma utdata kan uppnås med hjälp av kapslad listförståelse på bara en rad. I det här exemplet genereras en 5×5-matris med hjälp av en kapslad listförståelse. Den yttre förståelsen itererar fem gånger, vilket representerar raderna, medan den inre förståelsen fyller varje rad med värden från 0 till 4, vilket resulterar i en matris med på varandra följande heltalsvärden.
sträng i java-metoder
Python3
# Nested list comprehension> matrix> => [[j> for> j> in> range> (> 5> )]> for> i> in> range> (> 5> )]> print> (matrix)> |
byggare designmönster
>
>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]]>
Exempel 2: Filtrera en kapslad lista med hjälp av listförståelse
Här kommer vi att se hur vi kan filtrera en lista med och utan att använda listförståelse.
Utan att använda listförståelse
I det här exemplet går en kapslad loop genom en 2D-matris, extraherar udda tal från Python-listan i listan och lägger till dem i listanodd_numbers>
. Den resulterande listan innehåller alla udda element från 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)> |
>
>Produktion
[1, 3, 5, 7, 9]>
Använda listförståelse
I det här exemplet används en listförståelse för att kortfattat generera listanodd_numbers>
genom att iterera genom elementen i en 2D-matris. Endast udda element ingår i den resulterande listan, vilket ger ett kortfattat och läsbart alternativ till motsvarande kapslade loopstruktur.
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]>
Exempel 3: Platta ut kapslade underlistor
Utan Listförståelse
I det här exemplet namnges en 2D-listamatrix>
med varierande underlistlängder plattas ut med hjälp av kapslade loopar. Elementen från varje underlista läggs sekventiellt till listanflatten_matrix>
, vilket resulterar i en tillplattad representation av den ursprungliga matrisen.
tostring-metoden i java
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 Listförståelse
Återigen kan detta göras med hjälp av kapslad listförståelse som har visats nedan. I det här exemplet namnges en 2D-listamatrix>
med varierande underlistlängder plattas ut med hjälp av kapslad listförståelse. Uttrycket[val for sublist in matrix for val in sublist]>
genererar kortfattat en tillplattad lista genom att sekventiellt inkludera varje element från underlistorna.
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)> |
>
>Produktion
[1, 2, 3, 4, 5, 6, 7, 8, 9]>
Exempel 4: Manipulera sträng med hjälp av listförståelse
Utan Listförståelse
I det här exemplet namnges en 2D-listamatrix>
innehållande strängar modifieras med kapslade slingor . Den inre slingan använder den första bokstaven i varje frukt med stor bokstav, och den yttre slingan konstruerar en ny 2D-lista,modified_matrix>
, med frukterna med versaler, vilket resulterar i en matris av strängar med initiala versaler.
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 Listförståelse
I det här exemplet namnges en 2D-listamatrix>
innehållande strängar omvandlas med hjälp av kapslad listförståelse. Uttrycket[[fruit.capitalize() for fruit in row] for row in matrix]>
genererar effektivt en modifierad matris där den första bokstaven i varje frukt är versal, vilket resulterar i en ny matris av strängar med initiala versaler.
Python3
formatera datumet i java
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']]>