
La funzione filter() in Python
La funzione filter() è una funzione incorporata del linguaggio Python che prende in input una funzione e un iterabile e restituisce un nuovo iterabile con gli elementi per i quali la funzione restituisce True.
filter(funzione, iterabile)
La funzione filter() ha due argomenti:
- funzione
E' una funzione che prende un elemento dell'iterabile come argomento e restituisce un valore booleano (True o False). - iterabile
Un oggetto iterabile (come una lista, un set, una stringa, ecc.) sui cui elementi si desidera applicare il filtro.
Se la funzione passata a filter() restituisce True, l'elemento corrente dell'iterabile viene incluso nell'output; altrimenti, viene escluso.
Ricorda che filter() restituisce un oggetto filter. Se vuoi ottenere una lista, devi convertire l'output utilizzando list().
Ecco un esempio pratico.
Supponi di voler filtrare una lista di numeri per ottenere solo quelli pari.
Definisci una funzione che restituisce il resto della divisione per due.
- def e_pari(n):
- return n % 2 == 0
Poi definisci una lista con alcuni numeri.
numeri = [1, 2, 3, 4, 5, 6, 7, 8, 9]
Infine, seleziona i numeri pari della lista usando la funzione filter()
y=filter(e_pari, numeri)
Converti il risultato in una lista e stampa il risultato.
print(list(y))
La funzione filter() ha selezionato solo i numeri pari
[2, 4, 6, 8]
In alternativa, puoi combinare filter() con una funzione lambda per definire rapidamente delle funzioni anonime.
Ad esempio, puoi ottenere lo stesso risultato dell'esempio precedente in questo modo
y = filter(lambda x: x % 2 == 0, numeri)
print(list(y))
Anche in questo caso il risultato è un iterabile composto da numeri pari.
# [2, 4, 6, 8]
È possibile utilizzare filter() con qualsiasi tipo di iterabile, non solo con le liste.
Ad esempio, puoi filtrare le stringhe in base alla lunghezza:
frasi = ["ciao", "buongiorno", "salve", "hey"]
y = filter(lambda s: len(s) > 4, frasi)
print(list(y))
Il risultato in output è una lista composta solo dalle parole con più di 4 caratteri
['buongiorno', 'salve']
Puoi filtrare una lista di dizionari in base a una chiave specifica.
persone = [
{"nome": "Mario", "eta": 30},
{"nome": "Luca", "eta": 25},
{"nome": "Anna", "eta": 35},
]
y = filter(lambda p: p["eta"] >= 30, persone)
print(list(y))
In questo caso la funzione filter() seleziona solo le persone con età maggiore di 30
[{'nome': 'Mario', 'eta': 30}, {'nome': 'Anna', 'eta': 35}]
In conclusione filter() è uno strumento potente e flessibile che ti permette di eseguire operazioni di filtraggio sofisticate su una vasta gamma di iterabili in Python.