Comment utiliser la fonction filter() en Python

Découvrez comment utiliser la fonction filter() de Python pour extraire des éléments des collections. Comparez le filtre avec les compréhensions de liste et les rappels lambda.

Essayez cette solution dans l'éditeur

Aperçu

Le filtrage des données est une tâche essentielle dans la programmation d'applications. Vous devrez souvent effectuer une recherche dans une liste et extraire des éléments qui répondent à des critères spécifiques, tels que l'extraction d'utilisateurs actifs d'une base de données de profils ou le filtrage des nombres négatifs à partir des journaux de capteurs. Python fournit un outil fonctionnel intégré nommé « filter() » à cet effet.

La fonction `filter(function, iterable)` prend une fonction de filtrage et un itérable comme arguments. L'argument de la fonction doit renvoyer une valeur booléenne (« True » ou « False ») pour chaque élément. La fonction `filter()` évalue chaque élément, en conservant uniquement ceux qui sont évalués à `True`, et renvoie un objet itérateur (un objet `filter`) contenant les résultats.

Comme `map()`, `filter()` évalue les éléments paresseusement. Si vous avez besoin d'une liste standard immédiatement, vous convertissez la sortie en utilisant le constructeur `list()` : `list(filter(func, data))`. Si vous transmettez « Aucun » comme paramètre de fonction (par exemple, « filtre (Aucun, données) »), Python filtrera automatiquement tous les éléments faux, ce qui est un excellent raccourci pour effacer les valeurs vides.

Sortie de code et d'exécution

Ce script montre le filtrage des tableaux numériques, l'extraction des éléments du dictionnaire et la suppression des chaînes faussement vides avec filter().

filter_function.py
Essayez dans l'éditeur
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)
Sortie terminale
Positives only: [3, 8]
Words longer than 4 chars: ['elephant', 'giraffe']
Falsy values removed: ['hello', 'world', 'active']

Mise en œuvre étape par étape

  • Définissez une fonction qui accepte un élément et renvoie une valeur booléenne représentant les critères de filtre.
  • Appelez filter(function, iterable) pour créer un itérateur paresseux de correspondances.
  • Convertissez l'objet filtre résultant en une liste à l'aide de list(filter(...)) si vous devez manipuler les enregistrements.
  • Passez None comme argument de fonction pour filtrer toutes les valeurs fausses (comme None, 0 et les chaînes vides).

Foire aux questions

Que se passe-t-il si la fonction passée à filter() ne renvoie pas de booléen ?

Python évalue la véracité de la valeur renvoyée. Si la valeur est évaluée à True dans un contexte booléen, l'élément est conservé.

Dois-je utiliser filter() ou une compréhension de liste ?

Une compréhension de liste avec une condition if (par exemple, [x for x in list if condition]) est souvent préférée pour des raisons de lisibilité, mais filter() est propre et très performant, en particulier lors de l'utilisation de fonctions intégrées existantes.

Sujets connexes

Ressources Python recommandées

Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.