Razumevanje seznama je ena najbolj neverjetnih lastnosti Python . To je pameten in jedrnat način ustvarjanja seznamov s ponavljanjem čez predmet, ki ga je mogoče ponoviti. Razumevanje ugnezdenih seznamov ni nič drugega kot razumevanje seznamov znotraj drugega razumevanja seznamov, ki je precej podobno ugnezdenim zankam for.
Razumevanje ugnezdenih seznamov v sintaksi Python
Spodaj je sintaksa ugnezdenih razumevanje seznama :
Sintaksa: new_list = [[izraz za element na seznamu] za element na seznamu]
Parametri:
- Izraz : Izraz, ki se uporablja za spreminjanje vsake postavke v stavku
- Postavka: Element v ponovljivem
- seznam: Ponovljiv objekt
Primeri razumevanja ugnezdenih seznamov Python
Spodaj je nekaj primerov razumevanja ugnezdenih seznamov:
Primer 1: Ustvarjanje matrice
V tem primeru bomo primerjali, kako lahko ustvarite matrico ko ga ustvarjamo z
Brez razumevanja seznama
V tem primeru je matrika 5 × 5 ustvarjena z uporabo strukture ugnezdene zanke. Zunanja zanka se ponovi petkrat in na seznam doda prazne podseznamematrix>, medtem ko notranja zanka napolni vsak podseznam z vrednostmi v razponu od 0 do 4, kar povzroči matriko z zaporednimi celimi vrednostmi.
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)> |
>
>Izhod
[[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]]>
Uporaba seznamskega razumevanja
Enak rezultat je mogoče doseči z razumevanjem ugnezdenega seznama v samo eni vrstici. V tem primeru je matrika 5×5 ustvarjena z razumevanjem ugnezdenega seznama. Zunanje razumevanje se ponovi petkrat in predstavlja vrstice, medtem ko notranje razumevanje zapolni vsako vrstico z vrednostmi v razponu od 0 do 4, kar ima za posledico matriko z zaporednimi celimi vrednostmi.
Python3
# Nested list comprehension> matrix>=> [[j>for> j>in> range>(>5>)]>for> i>in> range>(>5>)]> print>(matrix)> |
>
>Izhod
ubuntu build basics
[[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]]>
Primer 2: Filtriranje ugnezdenega seznama z razumevanjem seznama
Tukaj bomo videli, kako lahko filtriramo seznam z in brez uporabe razumevanja seznama.
Brez uporabe seznamskega razumevanja
V tem primeru ugnezdena zanka prečka 2D matriko, ekstrahira liha števila s seznama Python znotraj seznama in jih doda na seznamodd_numbers>. Nastali seznam vsebuje vse lihe elemente iz matrike.
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)> |
>
>Izhod
[1, 3, 5, 7, 9]>
Uporaba seznamskega razumevanja
V tem primeru je za jedrnato generiranje seznama uporabljeno razumevanje seznamaodd_numbers>s ponavljanjem skozi elemente 2D matrike. Na končnem seznamu so vključeni samo lihi elementi, ki zagotavljajo jedrnato in berljivo alternativo enakovredni strukturi ugnezdene zanke.
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)> |
>
>Izhod
[1, 3, 5, 7, 9]>
Primer 3: Sploščitev ugnezdenih podseznamov
Brez razumevanja seznama
V tem primeru je imenovan 2D seznammatrix>z različnimi dolžinami podseznamov je sploščen z uporabo ugnezdenih zank. Elementi iz vsakega podseznama so zaporedno dodani na seznamflatten_matrix>, kar ima za posledico sploščeno predstavitev izvirne matrike.
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)> |
>
>Izhod
[1, 2, 3, 4, 5, 6, 7, 8, 9]>
Z razumevanjem seznama
Tudi to je mogoče storiti z razumevanjem ugnezdenega seznama, ki je prikazano spodaj. V tem primeru je imenovan 2D seznammatrix>z različnimi dolžinami podseznamov je sploščen z razumevanjem ugnezdenega seznama. Izraz[val for sublist in matrix for val in sublist]>jedrnato ustvari sploščen seznam z zaporedno vključitvijo vsakega elementa iz podseznamov.
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)> |
>
>Izhod
[1, 2, 3, 4, 5, 6, 7, 8, 9]>
Primer 4: Manipulacija niza z uporabo seznamskega razumevanja
Brez razumevanja seznama
V tem primeru je 2D seznam imenovanmatrix>ki vsebuje nize, se spremeni z uporabo ugnezdenih zanke . Notranja zanka naredi prvo črko vsakega sadja z veliko začetnico, zunanja zanka pa sestavi nov 2D seznam,modified_matrix>, z velikimi začetnicami plodov, kar ima za posledico matriko nizov z začetnimi velikimi črkami.
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)> |
>
>Izhod
[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>
Z razumevanjem seznama
V tem primeru je imenovan 2D seznammatrix>ki vsebuje nize, se preoblikuje z razumevanjem ugnezdenega seznama. Izraz[[fruit.capitalize() for fruit in row] for row in matrix]>učinkovito generira spremenjeno matriko, kjer je prva črka vsakega sadja velika, kar ima za posledico novo matriko nizov z začetnimi velikimi črkami.
Python3
algoritem globinsko iskanje
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)> |
>
>Izhod
[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>