Rozumienie list to jedna z najbardziej niesamowitych funkcji programu Pyton . Jest to inteligentny i zwięzły sposób tworzenia list poprzez iterację po iterowalnym obiekcie. Zagnieżdżone wyrażenia listowe to nic innego jak zrozumienie list w ramach innego rozumienia list, które jest całkiem podobne do zagnieżdżonych pętli for.
Rozumienie list zagnieżdżonych w składni Pythona
Poniżej znajduje się składnia zagnieżdżonego zrozumienie listy :
Składnia: new_list = [[wyrażenie dla pozycji na liście] dla pozycji na liście]
Parametry:
- Wyrażenie : Wyrażenie używane do modyfikowania każdego elementu instrukcji
- Przedmiot: Element w iterowalnym
- Lista: Iterowalny obiekt
Przykłady wyrażeń list zagnieżdżonych w Pythonie
Poniżej znajduje się kilka przykładów zrozumienia list zagnieżdżonych:
Przykład 1: Tworzenie matrycy
W tym przykładzie porównamy, jak możemy utwórz matrycę kiedy go tworzymy
Bez zrozumienia listy
W tym przykładzie tworzona jest macierz 5×5 przy użyciu struktury zagnieżdżonej pętli. Zewnętrzna pętla wykonuje iterację pięć razy, dołączając puste podlisty domatrix>
, podczas gdy wewnętrzna pętla wypełnia każdą podlistę wartościami z zakresu od 0 do 4, w wyniku czego powstaje macierz z kolejnymi wartościami całkowitymi.
samouczek języka programowania Java
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)> |
>
>Wyjście
[[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]]>
Korzystanie ze zrozumienia list
Ten sam wynik można uzyskać, stosując funkcję rozumienia list zagnieżdżonych w jednym wierszu. W tym przykładzie generowana jest macierz 5×5 przy użyciu zagnieżdżonego rozumienia list. Zewnętrzne zrozumienie iteruje pięć razy, reprezentując wiersze, podczas gdy wewnętrzne zrozumienie wypełnia każdy wiersz wartościami z zakresu od 0 do 4, w wyniku czego powstaje macierz z kolejnymi wartościami całkowitymi.
Python3
# Nested list comprehension> matrix> => [[j> for> j> in> range> (> 5> )]> for> i> in> range> (> 5> )]> print> (matrix)> |
>
>Wyjście
[[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]]>
Przykład 2: Filtrowanie listy zagnieżdżonej przy użyciu rozumienia listy
Tutaj zobaczymy, jak możemy filtrować listę ze zrozumieniem listy i bez niego.
Bez użycia rozumienia listy
W tym przykładzie zagnieżdżona pętla przechodzi przez macierz 2D, wyodrębniając liczby nieparzyste z listy Pythona na liście i dołączając je do listyodd_numbers>
. Wynikowa lista zawiera wszystkie nieparzyste elementy macierzy.
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)> |
>
numer Java na ciąg
>Wyjście
[1, 3, 5, 7, 9]>
Korzystanie ze zrozumienia list
W tym przykładzie do zwięzłego wygenerowania listy użyto rozumienia listyodd_numbers>
poprzez iterację po elementach macierzy 2D. Na wynikowej liście znajdują się tylko elementy nieparzyste, co stanowi zwięzłą i czytelną alternatywę dla równoważnej struktury zagnieżdżonej pętli.
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)> |
>
>Wyjście
[1, 3, 5, 7, 9]>
Przykład 3: Spłaszczanie zagnieżdżonych list podrzędnych
Bez zrozumienia listy
zmień nazwę folderu Linux
W tym przykładzie lista 2D o nazwiematrix>
o różnej długości podlisty jest spłaszczana za pomocą zagnieżdżonych pętli. Elementy z każdej podlisty są kolejno dołączane do listyflatten_matrix>
, co daje spłaszczoną reprezentację oryginalnej macierzy.
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)> |
>
>Wyjście
[1, 2, 3, 4, 5, 6, 7, 8, 9]>
Ze zrozumieniem listy
Ponownie można to zrobić za pomocą rozumienia list zagnieżdżonych, co pokazano poniżej. W tym przykładzie lista 2D o nazwiematrix>
o różnej długości podlist jest spłaszczana przy użyciu rozumienia list zagnieżdżonych. Ekspresja[val for sublist in matrix for val in sublist]>
zwięźle generuje spłaszczoną listę, włączając kolejno każdy element z podlist.
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)> |
Algorytm planowania okrężnego
>
>Wyjście
[1, 2, 3, 4, 5, 6, 7, 8, 9]>
Przykład 4: Manipulowanie ciągiem przy użyciu rozumienia listy
Bez zrozumienia listy
W tym przykładzie lista 2D o nazwiematrix>
zawierające ciągi jest modyfikowane przy użyciu zagnieżdżenia pętle . Wewnętrzna pętla pisze wielką pierwszą literę każdego owocu, a zewnętrzna pętla tworzy nową listę 2D,modified_matrix>
, z owocami pisanymi wielkimi literami, co daje macierz ciągów znaków z początkowymi wielkimi literami.
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)> |
>
>Wyjście
operatora Javy
[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>
Ze zrozumieniem listy
W tym przykładzie lista 2D o nazwiematrix>
zawierające ciągi są przekształcane przy użyciu zagnieżdżonego rozumienia list. Ekspresja[[fruit.capitalize() for fruit in row] for row in matrix]>
skutecznie generuje zmodyfikowaną macierz, w której pierwsza litera każdego owocu jest pisana wielką literą, co skutkuje nową macierzą ciągów znaków z początkowymi dużymi literami.
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)> |
>
>Wyjście
[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>