HOWTO · Python

Applicare una funzione a una lista in Python

Esistono 4 metodi principali per applicare una funzione a una lista in Python: il ciclo for, la funzione map(), la comprensione di lista e l'espressione generatrice.

In questa pagina

Per applicare una funzione a ogni elemento di una lista Python, chiamala per ciascun elemento e raccogli i valori restituiti. Per esempio, moltiplicando ogni numero per 10, [1, 2, 3, 4] diventa [10, 20, 30, 40]. Puoi usare un ciclo for, map(), una comprensione di lista o un’espressione generatrice. Gli esempi seguenti usano la stessa funzione e lo stesso input, così puoi confrontare come ciascun approccio produce o fornisce i risultati.

Usa un ciclo for per applicare una funzione a una lista in Python

Un ciclo for rende esplicito ogni passaggio: crea una lista dei risultati, chiama la funzione per ogni elemento in input e aggiunge ciascun valore restituito. È utile quando il ciclo deve includere altre istruzioni o diramazioni. L’esempio seguente applica la funzione a ogni numero e stampa la lista risultante.

def multiply_by_ten(number):
    return 10 * number


numbers = [1, 2, 3, 4]
results = []

for number in numbers:
    results.append(multiply_by_ten(number))

print(results)

Il ciclo lascia invariata numbers e crea results come lista separata. Modifica il corpo della funzione per eseguire la trasformazione necessaria sui tuoi dati.

Usa la funzione map() per applicare una funzione a una lista in Python

La funzione map() di Python accetta un oggetto chiamabile e un iterabile, quindi restituisce il risultato della funzione per ciascun elemento. In Python 3, map() restituisce un iteratore; racchiudilo in list() quando il resto del codice ha bisogno di una lista.

def multiply_by_ten(number):
    return 10 * number


numbers = [1, 2, 3, 4]
results = list(map(multiply_by_ten, numbers))
print(results)

Questa forma è concisa quando hai già una funzione da applicare. L’iteratore viene consumato man mano che list() ne richiede i valori; se vuoi attraversare di nuovo i valori, conserva la lista risultante oppure crea un altro iteratore.

Usa una comprensione di lista per applicare una funzione a una lista in Python

Una comprensione di lista crea una nuova lista collocando l’espressione per ciascun elemento prima della clausola for. È una struttura del linguaggio Python, non un metodo, ed è una scelta compatta quando la trasformazione si esprime chiaramente su una sola riga.

def multiply_by_ten(number):
    return 10 * number


numbers = [1, 2, 3, 4]
results = [multiply_by_ten(number) for number in numbers]
print(results)

L’espressione multiply_by_ten(number) determina ciascun risultato, mentre la clausola for fornisce gli elementi in input uno alla volta. Una comprensione può includere anche una condizione, se vuoi includere solo alcuni elementi.

Usa un’espressione generatrice per applicare una funzione a una lista in Python

Una espressione generatrice racchiude tra parentesi un’espressione simile a una comprensione. Produce i valori in modo lazy, man mano che vengono richiesti, invece di creare subito una lista dei risultati. In questo modo puoi evitare di conservare contemporaneamente tutti i valori trasformati; convertendo però il generatore in una lista, i valori vengono materializzati.

def multiply_by_ten(number):
    return 10 * number


numbers = [1, 2, 3, 4]
results = (multiply_by_ten(number) for number in numbers)
print(list(results))

Ogni valore viene prodotto durante l’iterazione. Un generatore si esaurisce mentre lo si percorre, quindi una seconda iterazione sullo stesso generatore non ripete i valori; se vuoi riutilizzarli, creane uno nuovo oppure salvali in una lista.

Conclusione

Scegli un ciclo for quando vuoi controllare esplicitamente ogni passaggio e usa map() quando applicare una funzione esistente a un iterabile è una scelta naturale. Una comprensione di lista crea direttamente una nuova lista con una sintassi concisa. Usa un’espressione generatrice quando vuoi iterare in modo lazy e non hai bisogno di materializzare subito tutti i risultati. Tutti e quattro gli approcci possono chiamare funzioni predefinite oltre a quelle che definisci tu; per esempio, una comprensione può applicare str a ogni elemento con [str(item) for item in numbers].