In python la funzione built-in filter() crea una lista di elementi per cui la funzione è verificata. Possiamo semplificare il tutto vedendola come un filtro per una lista.

Sintassi

lista_nuova = list(filter(funzione_da_applicare, lista_vecchia))

Se volessi utilizzare la funzione filter() per ottenere solamente i numeri pari di una lista dovrei procedere in questo modo:

def pari(x):
if x % 2 == 0:
return True
else:
return False

print(list(filter(pari, [0, 2, 3, 4, 5, 10])))

#output
[0, 2, 4, 10]

Differenze tra filter() e for loop

Come per le altre funzioni built-in che abbiamo già visto(map e reduce), la stessa operazione può essere replicata utilizzando un ciclo for:

lista_numeri = [0, 2, 3, 4, 5, 10]
lista_numeri_pari = []
for numero in lista_numeri:
if numero % 2 == 0:
lista_numeri_pari.append(numero)

print(lista_numeri_pari)
#output
[0, 2, 4, 10]

Possiamo notare quindi delle differenze, in quest'ultimo caso vengono utilizzate 5 righe rispetto alle 3 precedenti, in quanto bisogna dichiarare la lista prima di iniziare il for loop, inoltre con filter() avremmo una maggiore ottimizzazione del codice.

Utilizzare funzioni lambda

Per ottenere sempre i numeri pari di una lista possiamo ricorrere all'utilizzo di funzioni lambda:

>>> list(filter(lambda x: x % 2 == 0, [0, 2, 3, 4, 5, 10]))
[0, 2, 4, 10]

Condividi sui Social