La funzione filter di Python

Di mech06


Pubblicato Domenica 31 Maggio 2020 00:34


La funzione filter si rivela molto utile in tutte quelle situazioni in cui dobbiamo andare velocemente ( e con una sola riga di codice! ), andare a togliere via da una lista elementi che non rispettano un determinato requisito.

Facciamo subito un esempio, togliamo da una lista tutti i numeri che non sono divisibili per due:


list( filter ( lambda x : x%2 == 0, [1,2,3,4,5,6] ) )
#output: [2,4,6]

Come vediamo sono mantenuti i soli elementi per la quale è vero il check imposto dalla funzione lambda, mentre tutti gli altri sono scartati.

Nulla ci vieta di fare la stessa cosa ma senza la funzione lambda, ciò potrebbe essere utile quando dobbiamo valutare condizioni più complesse per la quale la sola funzione lambda non basterebbe:


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

list( filter ( div_per_due, [1,2,3,4,5,6] ) )
#output: [2,4,6]

Vediamo come in questo caso la funzione ( resa volutamente più verbosa a scopo didattico ) deve ricevere in ingresso un parametro che è proprio quello che andremo a testare.

Come vedete insieme alla funzione filter utilizziamo la funzione list. Questo perchè in python3 se usassimo solo la funzione filter otterremmo un oggetto in memoria e nessuna lista, infatti filter in python3 torna un iteratore il quale ciclando applica i dati in ingresso alla funzione di filtraggio. Ci serve quindi una funzione di supporto in grado di saper gestire questo iteratore e list è proprio quello che ci serve, cicla gli elementi nell'iteratore restituito da filter tirando fuori i dati sottoforma di lista.

In maniera analoga se avessimo voluto una tupla, avremmo potuto sostituire la funzione tuple a list, riprendendo quindi il primo esempio:


tuple( filter ( lambda x : x%2 == 0, [1,2,3,4,5,6] ) )
#output: (2,4,6)

Un'ultima curiosità, filter può essere usato anche senza nessuna funzione associata. In questo caso il controllo che viene operato di default riguarda la tipologia del dato nella lista, se questo è un dato che viene considerato implicitamente True da python allora "passa" il controllo, altrimenti viene scartato, vediamo un esempio:


list( filter ( None, [ True, "" , "sono true", 0, 1 ] ) )
#output [ True, "sono true", 1 ]


Torna alla home

Oppure esplora gli altri articoli sugli stessi argomenti:

#Python