logo

Vnorené porozumenia zoznamu v Pythone

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á algebra
Vý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']]>