Porozumenie zoznamu je jednou z najúžasnejších funkcií Python . Je to inteligentný a stručný spôsob vytvárania zoznamov iterovaním cez iterovateľný objekt. Vnorené porozumenia zoznamu nie sú nič iné ako porozumenie zoznamu v rámci iného pochopenia zoznamu, ktoré je dosť podobné vnoreným slučkám for.
Porozumenie vnoreného zoznamu v syntaxi Pythonu
Nižšie je syntax vnoreného porozumenie zoznamu :
Syntax: new_list = [[výraz pre položku v zozname] pre položku v zozname]
Parametre:
- Výraz : Výraz, ktorý sa používa na úpravu každej položky vo výpise
- Položka: Prvok v iterovateľnom
- zoznam: Iterovateľný objekt
Príklady vnorených zoznamov Pythonu
Nižšie je uvedených niekoľko príkladov pochopenia vnoreného zoznamu:
Príklad 1: Vytvorenie Matrixu
V tomto príklade porovnáme, ako môžeme vytvoriť maticu keď ho tvoríme s
Bez porozumenia zoznamu
V tomto príklade je matica 5×5 vytvorená pomocou štruktúry vnorenej slučky. Vonkajšia slučka sa iteruje päťkrát, pričom k nej pridá prázdne podzoznamymatrix>
, zatiaľ čo vnútorná slučka vyplní každý podzoznam hodnotami v rozsahu od 0 do 4, výsledkom čoho je matica s po sebe idúcimi celočíselnými hodnotami.
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)> |
>
>Výkon
[[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]]>
Používanie porozumenia zoznamu
nahradiť farbu v gimp
Rovnaký výstup možno dosiahnuť pomocou porozumenia vnoreného zoznamu iba v jednom riadku. V tomto príklade sa matica 5×5 vygeneruje pomocou pochopenia vnoreného zoznamu. Vonkajšie porozumenie sa opakuje päťkrát, pričom predstavuje riadky, zatiaľ čo vnútorné porozumenie vyplní každý riadok hodnotami v rozsahu od 0 do 4, výsledkom čoho je matica s po sebe idúcimi celočíselnými hodnotami.
Python3
# Nested list comprehension> matrix> => [[j> for> j> in> range> (> 5> )]> for> i> in> range> (> 5> )]> print> (matrix)> |
>
kto je Freddie Mercury
>Výkon
[[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]]>
Príklad 2: Filtrovanie vnoreného zoznamu pomocou funkcie List Comprehension
Tu uvidíme, ako môžeme filtrovať zoznam s a bez použitia porozumenia zoznamu.
Bez použitia porozumenia zoznamu
V tomto príklade vnorená slučka prechádza 2D maticou, pričom extrahuje nepárne čísla zo zoznamu Python v rámci zoznamu a pridáva ich do zoznamuodd_numbers>
. Výsledný zoznam obsahuje všetky nepárne prvky z matice.
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)> |
>
>Výkon
porovnávanie reťazcov c#
[1, 3, 5, 7, 9]>
Používanie porozumenia zoznamu
V tomto príklade sa na stručné vygenerovanie zoznamu používa porozumenie zoznamuodd_numbers>
iterovaním cez prvky 2D matice. Vo výslednom zozname sú zahrnuté iba nepárne prvky, čo poskytuje stručnú a čitateľnú alternatívu k ekvivalentnej štruktúre vnorenej slučky.
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)> |
>
>Výkon
[1, 3, 5, 7, 9]>
Príklad 3: Sploštenie vnorených podzoznamov
Bez porozumenia zoznamu
V tomto príklade 2D zoznam s názvommatrix>
s rôznou dĺžkou podzoznamu je sploštená pomocou vnorených slučiek. Prvky z každého podzoznamu sa postupne pridávajú do zoznamuflatten_matrix>
výsledkom je sploštená reprezentácia pôvodnej matice.
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)> |
>
>Výkon
[1, 2, 3, 4, 5, 6, 7, 8, 9]>
S porozumením zoznamu
Opäť to možno urobiť pomocou pochopenia vnoreného zoznamu, ktorý je uvedený nižšie. V tomto príklade 2D zoznam s názvommatrix>
s rôznou dĺžkou podzoznamu je sploštená pomocou porozumenia vnoreného zoznamu. Výraz[val for sublist in matrix for val in sublist]>
stručne vygeneruje sploštený zoznam postupným zahrnutím každého prvku z podzoznamov.
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)> |
>
>
distributívny zákon, booleovská algebraVýkon
[1, 2, 3, 4, 5, 6, 7, 8, 9]>
Príklad 4: Manipulácia s reťazcom pomocou funkcie List Comprehension
Bez porozumenia zoznamu
V tomto príklade 2D zoznam s názvommatrix>
obsahujúce reťazce sa upraví pomocou vnoreného slučky . Vnútorná slučka používa veľké prvé písmeno každého ovocia a vonkajšia slučka vytvára nový 2D zoznam,modified_matrix>
, s veľkými písmenami, výsledkom čoho je matica reťazcov so začiatočnými veľkými písmenami.
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)> |
>
>Výkon
[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>
S porozumením zoznamu
V tomto príklade 2D zoznam s názvommatrix>
obsahujúce reťazce sa transformuje pomocou porozumenia vnoreného zoznamu. Výraz[[fruit.capitalize() for fruit in row] for row in matrix]>
efektívne generuje upravenú maticu, kde je prvé písmeno každého ovocia veľké, výsledkom čoho je nová matica reťazcov s počiatočnými veľkými písmenami.
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)> |
význam xdxd
>
>Výkon
[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>