Come utilizzare la funzione filter() in Python

Scopri come utilizzare la funzione filter() di Python per estrarre elementi dalle raccolte. Confronta il filtro con le comprensioni degli elenchi e i callback lambda.

Prova questa soluzione nell'editor

Panoramica

Il filtraggio dei dati è un compito fondamentale nella programmazione delle applicazioni. Spesso dovrai cercare in un elenco ed estrarre elementi che soddisfano criteri specifici, come estrarre gli utenti attivi da un database di profili o filtrare i numeri negativi dai log dei sensori. Python fornisce uno strumento funzionale integrato chiamato `filter()` per questo scopo.

La funzione `filter(function, iterable)` accetta una funzione di filtro e un iterable come argomenti. L'argomento della funzione deve restituire un valore booleano ("Vero" o "Falso") per ciascun elemento. La funzione "filter()" valuta ogni elemento, conservando solo quelli che valutano "True" e restituisce un oggetto iteratore (un oggetto "filter") contenente i risultati.

Come `map()`, `filter()` valuta gli elementi in modo pigro. Se hai bisogno immediatamente di un elenco standard, esegui il cast dell'output utilizzando il costruttore `list()`: `list(filter(func, data))`. Se passi `None` come parametro della funzione (ad esempio, `filter(None, data)`), Python filtrerà automaticamente tutti gli elementi che sono falsi, che è un'ottima scorciatoia per cancellare i valori vuoti.

Codice e output di esecuzione

Questo script dimostra il filtraggio di array numerici, l'estrazione di elementi del dizionario e l'eliminazione di false stringhe vuote con filter().

filter_function.py
Prova nell'editor
numbers = [-5, -2, 0, 3, 8, -1]

# 1. Filter positive numbers using a lambda function
positives = list(filter(lambda x: x > 0, numbers))
print("Positives only:", positives)

# 2. Filter list of strings by character length
words = ["cat", "elephant", "dog", "giraffe"]
long_words = list(filter(lambda w: len(w) > 4, words))
print("Words longer than 4 chars:", long_words)

# 3. Shorthand: Remove all falsy values from a list by passing None
mixed_data = ["hello", "", "world", None, False, "active"]
clean_data = list(filter(None, mixed_data))
print("Falsy values removed:", clean_data)
Uscita terminale
Positives only: [3, 8]
Words longer than 4 chars: ['elephant', 'giraffe']
Falsy values removed: ['hello', 'world', 'active']

Implementazione passo dopo passo

  • Definire una funzione che accetta un elemento e restituisce un valore booleano che rappresenta i criteri di filtro.
  • Chiama filter(function, iterable) per creare un iteratore pigro di corrispondenze.
  • Trascina l'oggetto filtro risultante in un elenco utilizzando list(filter(...)) se è necessario manipolare i record.
  • Passa None come argomento della funzione per filtrare tutti i valori falsi (come None, 0 e stringhe vuote).

Domande frequenti

Cosa succede se la funzione passata a filter() non restituisce un valore booleano?

Python valuta la veridicità del valore restituito. Se il valore restituisce True in un contesto booleano, l'elemento viene mantenuto.

Dovrei usare filter() o una comprensione di elenco?

Una comprensione dell'elenco con una condizione if (ad esempio, [x for x in list if condition]) è spesso preferita per la leggibilità, ma filter() è pulito e altamente performante, specialmente quando si utilizzano funzioni integrate esistenti.

Argomenti correlati

Risorse Python consigliate

Espandi le tue conoscenze con tutorial interattivi, foglietti illustrativi e confronti di codici correlati.