logo

Comprensioni degli elenchi annidati in Python

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