La comprensione delle liste è una delle caratteristiche più sorprendenti di Pitone . È un modo intelligente e conciso per creare elenchi eseguendo l'iterazione su un oggetto iterabile. Le comprensioni di elenchi nidificati non sono altro che una comprensione di elenchi all'interno di un'altra comprensione di elenchi che è abbastanza simile ai cicli for nidificati.
Comprensione degli elenchi nidificati nella sintassi Python
Di seguito è riportata la sintassi di nidificato comprensione delle liste :
Sintassi: new_list = [[espressione per l'elemento nell'elenco] per l'elemento nell'elenco]
parametri:
metodi di stringa
- Espressione : espressione utilizzata per modificare ciascun elemento nell'istruzione
- Articolo: L'elemento nell'iterabile
- Elenco: Un oggetto iterabile
Esempi di comprensione di elenchi nidificati Python
Di seguito sono riportati alcuni esempi di comprensione di elenchi nidificati:
Esempio 1: Creazione di una matrice
In questo esempio, confronteremo come possiamo creare una matrice quando lo stiamo creando con
Senza comprensione dell'elenco
In questo esempio, viene creata una matrice 5×5 utilizzando una struttura a cicli nidificati. Un ciclo esterno ripete cinque volte, aggiungendo sottoliste vuote al filematrix>
, mentre un ciclo interno popola ciascuna sottolista con valori compresi tra 0 e 4, risultando in una matrice con valori interi consecutivi.
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)> |
>
>Produzione
[[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]]>
Utilizzo della comprensione delle liste
Lo stesso risultato può essere ottenuto utilizzando la comprensione di elenchi annidati in una sola riga. In questo esempio, viene generata una matrice 5×5 utilizzando una comprensione di liste nidificate. La comprensione esterna ripete cinque volte, rappresentando le righe, mentre la comprensione interna popola ciascuna riga con valori compresi tra 0 e 4, risultando in una matrice con valori interi consecutivi.
Python3
# Nested list comprehension> matrix> => [[j> for> j> in> range> (> 5> )]> for> i> in> range> (> 5> )]> print> (matrix)> |
>
>Produzione
[[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]]>
Esempio 2: filtraggio di un elenco nidificato utilizzando la comprensione dell'elenco
Qui vedremo come filtrare un elenco con e senza utilizzare la comprensione delle liste.
Senza utilizzare la comprensione delle liste
In questo esempio, un ciclo annidato attraversa una matrice 2D, estraendo i numeri dispari dall'elenco Python all'interno dell'elenco e aggiungendoli all'elencoodd_numbers>
. L'elenco risultante contiene tutti gli elementi dispari della matrice.
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)> |
>
>Produzione
[1, 3, 5, 7, 9]>
Utilizzo della comprensione delle liste
In questo esempio, viene utilizzata una comprensione dell'elenco per generare brevemente l'elencoodd_numbers>
iterando attraverso gli elementi di una matrice 2D. Nell'elenco risultante vengono inclusi solo gli elementi dispari, fornendo un'alternativa concisa e leggibile all'equivalente struttura a cicli nidificati.
Python3
sistema operativo Linux
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)> |
>
>Produzione
[1, 3, 5, 7, 9]>
Esempio 3: Appiattimento delle sottoliste nidificate
Senza comprensione dell'elenco
In questo esempio, un elenco 2D denominatomatrix>
con lunghezze di sottoliste variabili viene appiattito utilizzando cicli nidificati. Gli elementi di ciascun sottoelenco vengono aggiunti in sequenza all'elencoflatten_matrix>
, risultando in una rappresentazione appiattita della matrice originale.
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)> |
>
>Produzione
[1, 2, 3, 4, 5, 6, 7, 8, 9]>
Con la comprensione dell'elenco
Anche in questo caso è possibile farlo utilizzando la comprensione degli elenchi annidati mostrata di seguito. In questo esempio, un elenco 2D denominatomatrix>
con lunghezze di sottoliste variabili viene appiattito utilizzando la comprensione di elenchi nidificati. L'espressione[val for sublist in matrix for val in sublist]>
genera brevemente un elenco appiattito includendo in sequenza ciascun elemento dai sottoelenchi.
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)> |
>
>Produzione
[1, 2, 3, 4, 5, 6, 7, 8, 9]>
Esempio 4: manipolare la stringa utilizzando la comprensione dell'elenco
Senza comprensione dell'elenco
In questo esempio, un elenco 2D denominatomatrix>
contenente le stringhe viene modificato utilizzando annidato loop . Il ciclo interno rende maiuscola la prima lettera di ciascun frutto e il ciclo esterno costruisce un nuovo elenco 2D,modified_matrix>
, con i frutti maiuscoli, risultando in una matrice di stringhe con iniziali maiuscole.
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)> |
>
>Produzione
[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>
Con la comprensione dell'elenco
In questo esempio, un elenco 2D denominatomatrix>
contenente le stringhe viene trasformato utilizzando la comprensione degli elenchi annidati. L'espressione[[fruit.capitalize() for fruit in row] for row in matrix]>
genera in modo efficiente una matrice modificata in cui la prima lettera di ciascun frutto è in maiuscolo, risultando in una nuova matrice di stringhe con le lettere iniziali maiuscole.
Python3
differenze in Python
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)> |
>
>Produzione
[['Apple', 'Banana', 'Cherry'], ['Date', 'Fig', 'Grape'], ['Kiwi', 'Lemon', 'Mango']]>