logo

Comprensions de llistes niades en Python

La comprensió de llistes és una de les característiques més sorprenents de Python . És una manera intel·ligent i concisa de crear llistes iterant sobre un objecte iterable. Les Compressions de llista imbricades no són més que una comprensió de llista dins d'una altra comprensió de llista que és força semblant a bucles for imbricats.

Comprensió de llistes niades a la sintaxi de Python

A continuació es mostra la sintaxi de imbricat comprensió de llista :



Sintaxi: new_list = [[expressió per a l'element de la llista] per a l'element de la llista]

Paràmetres:

  • Expressió : Expressió que s'utilitza per modificar cada element de l'enunciat
  • Article: L'element en l'iterable
  • Llista: Un objecte iterable

Exemples de comprensió de llistes imbricades de Python

A continuació es mostren alguns exemples de comprensió de llistes imbricades:



Exemple 1: Creació d'una matriu

En aquest exemple, compararem com podem crear una matriu quan l'estem creant amb

Sense comprensió de llista

fil.destruir

En aquest exemple, es crea una matriu de 5×5 utilitzant una estructura de bucle imbricada. Un bucle extern itera cinc vegades, afegint subllistes buides al fitxermatrix>, mentre que un bucle intern omple cada subllista amb valors que van de 0 a 4, donant com a resultat una matriu amb valors enters consecutius.



Python 3




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)>

>

>

Sortida

[[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]]>

Ús de la comprensió de llistes

La mateixa sortida es pot aconseguir mitjançant la comprensió de llistes imbricades en una sola línia. En aquest exemple, es genera una matriu de 5×5 mitjançant una comprensió de llista imbricada. La comprensió externa itera cinc vegades, representant les files, mentre que la comprensió interna omple cada fila amb valors que van de 0 a 4, donant lloc a una matriu amb valors enters consecutius.

Python 3




# Nested list comprehension> matrix>=> [[j>for> j>in> range>(>5>)]>for> i>in> range>(>5>)]> print>(matrix)>

>

>

Sortida

[[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]]>

Exemple 2: filtrar una llista anidada mitjançant la comprensió de llista

Aquí, veurem com podem filtrar una llista amb i sense utilitzar la comprensió de llista.

Sense utilitzar la comprensió de llistes

En aquest exemple, un bucle imbricat travessa una matriu 2D, extreu nombres senars de la llista de Python dins de la llista i els afegeix a la llista.odd_numbers>. La llista resultant conté tots els elements estranys de la matriu.

Python 3




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)>

>

>

Sortida

[1, 3, 5, 7, 9]>

Ús de la comprensió de llistes

En aquest exemple, s'utilitza una comprensió de llista per generar la llista de manera sucintaodd_numbers>iterant a través dels elements d'una matriu 2D. Només s'inclouen elements estranys a la llista resultant, proporcionant una alternativa concisa i llegible a l'estructura de bucle imbricada equivalent.

Python 3




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)>

>

>

Sortida

[1, 3, 5, 7, 9]>

Exemple 3: Aplanament de subllistes imbricades

Sense comprensió de llista

En aquest exemple, s'anomena una llista 2Dmatrix>amb diferents longituds de subllista s'aplana mitjançant bucles imbricats. Els elements de cada subllista s'afegeixen seqüencialment a la llistaflatten_matrix>, donant lloc a una representació aplanada de la matriu original.

Python 3




# 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)>

>

string jsonobject

>

Sortida

[1, 2, 3, 4, 5, 6, 7, 8, 9]>

Amb comprensió de llistes

De nou, això es pot fer mitjançant la comprensió de llistes imbricades que es mostra a continuació. En aquest exemple, s'anomena una llista 2Dmatrix>amb diferents longituds de subllistes s'aplana mitjançant la comprensió de llistes imbricades. L'expressió[val for sublist in matrix for val in sublist]>genera de manera sucinta una llista aplanada incloent seqüencialment cada element de les subllistes.

Python 3




# 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)>

>

>

Sortida

[1, 2, 3, 4, 5, 6, 7, 8, 9]>

Exemple 4: manipulació de la cadena mitjançant la comprensió de llista

Sense comprensió de llista

En aquest exemple, s'anomena una llista 2Dmatrix>que conté cadenes es modifica amb imbricat bucles . El bucle interior posa en majúscula la primera lletra de cada fruit, i el bucle exterior construeix una nova llista 2D,modified_matrix>, amb els fruits en majúscula, donant lloc a una matriu de cadenes amb majúscules inicials.

Python 3




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)>

>

>

Sortida

[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>

Amb comprensió de llistes

En aquest exemple, s'anomena una llista 2Dmatrix>que conté cadenes es transforma mitjançant la comprensió de llistes imbricades. L'expressió[[fruit.capitalize() for fruit in row] for row in matrix]>genera de manera eficient una matriu modificada on la primera lletra de cada fruit està en majúscula, donant lloc a una nova matriu de cadenes amb majúscules inicials.

Python 3




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)>

>

>

Sortida

[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>