Accéder au contenu principal

Python filter() : Gardez ce dont vous avez besoin

Apprenez à utiliser la fonction filter() de Python pour extraire des éléments de listes ou d'autres itérables. Comprendre les principales différences entre le filtre et les outils Python similaires.
Actualisé 27 juin 2025  · 7 min de lecture

Le filtrage est l'une des tâches les plus courantes en Python, c'est pourquoi Python le rend facile. L'une des façons les plus simples de filtrer les données est d'utiliser la fonction intégrée filter(). Comme son nom l'indique clairement, filter() vous permet d'extraire uniquement les éléments qui répondent à une (ou plusieurs) condition(s) donnée(s).

Ce guide vous explique comment il fonctionne, quand l'utiliser et comment il se compare à d'autres outils de filtrage. Lisez-le !

Ce que fait la fonction filter() de Python

filter() vous permet d'extraire des éléments d'une liste, d'un tuple ou de n'importe quel itérable, mais seulement s'ils passent votre test. Vous fournissez une fonction (parfois appelée prédicat) qui prend chaque élément et renvoie True ou False. Si le test est réussi (c'est-à-dire si votre fonction renvoie True), filter() le conserve. Dans le cas contraire, l'élément est ignoré. Cela se passe d'explications, alors continuons.

Syntaxe de Python filter()

Voici le format :

filter(function, iterable)
  • function: Spécifie le test que vous souhaitez appliquer à chaque élément. Elle doit prendre un argument et renvoyer True ou False.

  • iterable: Fournit une liste, un tuple, une chaîne de caractères ou tout autre objet sur lequel vous pouvez effectuer une boucle.

Lorsque vous appelez filter(), il renvoie un objet filtre spécial, et non une liste ou un tuple directement. Pour pouvoir utiliser les résultats filtrés, vous devez généralement les inclure dans une liste ou un tuple. Ce choix de conception permet à filter() d'être efficace, mais c'est une chose à garder à l'esprit lorsque vous écrivez votre code.

Exemples de Python filter()

Entraînons-nous un peu.

Python filter() avec une fonction personnalisée

Utilisons filter() avec une fonction que nous écrivons pour nous-mêmes.

Supposons que vous souhaitiez conserver uniquement les nombres pairs d'une liste :

def is_even(num):
    return num % 2 == 0

numbers = [1, 2, 3, 4, 5, 6]
result = filter(is_even, numbers)
print(list(result))

Ce message s'imprimera :

[2, 4, 6]

Remarquez comment is_even vérifie si un nombre est divisible par 2. filter() utilise notre fonction personnalisée pour tester chaque élément et conserver ceux qui passent le test.

Python filter() avec les fonctions lambda

Bien entendu, tous les filtres n'ont pas besoin d'une définition complète des fonctions. Parfois, votre règle de filtrage est si simple ou si spécifique à un endroit que la définition d'une fonction nommée est trop fastidieuse.

Voici le même exemple pour les nombres pairs, mais en utilisant une lambda pour un test concis et in situ :

numbers = [1, 2, 3, 4, 5, 6] 
result = filter(lambda x: x % 2 == 0, numbers) 
print(list(result))

Vous obtiendrez le même résultat que précédemment.

L'utilisation de lambda avec filter() est particulièrement fréquente lorsque vous souhaitez que votre code soit court et ciblé. Il convient parfaitement aux tâches de filtrage ponctuelles, car il vous permet d'exprimer votre règle là où vous en avez besoin.

Python filter() avec None comme fonction

Parfois, vous souhaitez filter() éliminer les valeurs vides ou fausses. Des choses comme 0, des chaînes vides, None, ou False, et nous voulons le faire sans écrire une fonction personnalisée.

Python a une astuce pour cela : Si vous fixez l'argument de la fonction dans filter() à None, filter() supprimera automatiquement tous les éléments que Python considère comme False.

En voici un exemple :

items = [0, 1, '', 'hello', [], [2, 3], None, False, True] 
result = filter(None, items) 
print(list(result))

Ce message s'imprimera :

[1, 'hello', [2, 3], True]

Filtrage des données textuelles

Appliquons maintenant filter() à un problème pratique et quotidien. Supposons que vous disposiez d'une liste de mots et que vous souhaitiez uniquement ceux qui commencent par "a". Ce type de filtrage ciblé est fréquent lors du traitement de textes.

words = ['apple', 'banana', 'apricot', 'cherry', 'avocado'] 
result = filter(lambda word: word.startswith('a'), words) 
print(list(result))

Vous obtiendrez :

['apple', 'apricot', 'avocado']

Filtrage avec conditions multiples

Parfois, vos critères de filtrage sont plus complexes. Que faire si vous avez besoin d'articles qui répondent à plusieurs conditions ? Voici comment vous pouvez le faire en utilisant un lambda. Dans cet exemple, nous recherchons des nombres qui sont à la fois pairs et supérieurs à 10.

numbers = [4, 10, 12, 15, 20, 23, 28] 
result = filter(lambda x: x % 2 == 0 and x > 10, numbers) 
print(list(result))

Cette impression :

[12, 20, 28]

(Si je devais avoir encore plus de conditions, j'envisagerais de passer d'une lambda à une fonction nommée pour plus de clarté).

filter() vs. Compréhension des listes

Les listes de compréhension sont un autre moyen courant de sélectionner des éléments. Les deux approches vous permettent de filtrer les données, mais chacune a son propre style.

Reprenons l'exemple des nombres pairs, en utilisant cette fois la compréhension d'une liste :

numbers = [1, 2, 3, 4, 5, 6] 
result = [x for x in numbers if x % 2 == 0] 
print(result)
[2, 4, 6]

Les compréhensions filter() et les compréhensions de liste sont toutes deux efficaces. Les listes de compréhension sont souvent plus faciles à lire pour les filtres simples, en particulier lorsque la règle est courte et simple.

D'autre part, filter() fonctionne bien lorsque vous travaillez déjà avec des fonctions ou lorsque vous souhaitez enchaîner plusieurs étapes de traitement.

Utilisations plus avancées

Essayons de trouver des cas plus intéressants :

filter() avec d'autres itérables

Tout comme nous l'avons fait avec les listes, filter() fonctionne également avec n'importe quel itérable, comme les tuples, les ensembles - et même les expressions de générateurs. Il est bon de le savoir, car vos données ne se présenteront pas toujours sous forme de liste.

Voici comment vous pouvez filtrer un tuple :

numbers = (10, 15, 20, 25, 30) 
result = filter(lambda x: x > 20, numbers) 
print(tuple(result))

Ce message s'imprimera :

(25, 30)

N'oubliez pas de convertir l'objet filtre au type souhaité (liste, tuple, etc.) lorsque vous devez utiliser les résultats directement.

J'ai également mentionné les générateurs et, pour être complet, je montrerai également un exemple de filtrage avec des générateurs :

numbers = (x for x in range(10))
result = filter(lambda x: x % 2 == 0, numbers)
print(list(result))

Il s'agit d'un générateur car cette ligne : numbers = (x for x in range(10)) crée un objet générateur. (Il est paresseux et ne génère pas toutes les valeurs en même temps).

La dernière ligne : print(list(result)) force l'évaluation en convertissant l'objet filtre paresseux en une liste.

Combiner filter() et map()

Que se passe-t-il si vous souhaitez à la fois filtrer et transformer vos données, par exemple, pour notre prochain exemple, ne mettre au carré que les nombres pairs d'une liste ?

Python facilite cette tâche en vous permettant de combiner filter() et map(). Tout d'abord, filter() sélectionne les articles que vous souhaitez, puis map() applique une autre fonction à chacun d'entre eux.

Voici ce qu'il en est dans la pratique :

numbers = [1, 2, 3, 4, 5, 6] 
evens = filter(lambda x: x % 2 == 0, numbers) 
squared = map(lambda x: x ** 2, evens) 
print(list(squared))

Cette impression :

[4, 16, 36]

En enchaînant filter() et map(), vous pouvez construire des pipelines de données clairs et lisibles, en sélectionnant d'abord les éléments qui vous intéressent, puis en les transformant si nécessaire. Vous aurez l'occasion d'utiliser ce modèle dans votre propre travail.

Les points à surveiller

Aussi pratique que soit le site filter(), il y a quelques erreurs à ne pas commettre :

  • filter() renvoie un objet filtre, et non une liste. Cela peut vous faire trébucher si vous vous attendez à des résultats immédiats. Il faut toujours l'envelopper dans une liste (ou un tuple) si vous avez besoin de voir ou de réutiliser les résultats.

  • filter() ne fonctionne qu'avec un seul itérable à la fois. Si vous souhaitez filtrer sur la base de plusieurs listes, vous devrez les regrouper ou utiliser une autre approche.

  • filter() est paresseux. Il ne traite pas réellement les données tant que vous ne les convertissez pas en liste, en tuple ou en boucle. Gardez ce comportement à l'esprit lors du débogage.

Conclusion

Comme vous l'avez vu, la fonction filter() de Python vous offre un moyen rapide de nettoyer les données en n'en retirant que ce qui est important. filter() est utile si vous écrivez une lambda unique ou si vous insérez une fonction nommée. 

Si vous ne savez pas comment utiliser filter(), ou si vous avez l'impression que c'était assez simple et que vous voulez continuer à apprendre, nous avons d'excellentes ressources pour vous aider. Je vous recommande notre cursus de compétences Python Programming Fundamentals


Josef Waples's photo
Author
Josef Waples

Je suis rédacteur et éditeur dans le domaine de la science des données. Je suis particulièrement intéressé par l'algèbre linéaire, les statistiques, R, etc. Je joue également beaucoup aux échecs ! 

FAQ sur le filtre Python

Que fait la fonction Python filter() ?

La fonction filter() prend une fonction et une table itérative et renvoie une nouvelle table itérative contenant uniquement les éléments qui passent le test. La fonction de test doit renvoyer True pour les éléments que vous souhaitez conserver et False pour ceux que vous souhaitez ignorer.

Pourquoi dois-je envelopper le résultat de filter() dans list() ou tuple() ?

filter() renvoie un objet filtre, qui est un itérateur. Pour visualiser ou réutiliser les résultats filtrés, vous les convertissez généralement en liste ou en tuple à l'aide de list() ou tuple(). Cette étape est essentielle pour l'impression, le débogage ou le passage du résultat à d'autres fonctions.

Puis-je utiliser filter() sans écrire une fonction personnalisée ?

Oui. Vous pouvez utiliser une fonction lambda pour des tests courts et ponctuels, ou passer None comme argument de la fonction pour supprimer automatiquement toutes les valeurs "fausses" comme 0, '', None et False.

Quelle est la comparaison entre filter() et les compréhensions de listes ?

Les compréhensions filter() et les compréhensions de liste vous permettent toutes deux de filtrer les données, mais les compréhensions de liste sont souvent plus lisibles pour les conditions simples. filter() est utile lorsque vous réutilisez la logique via des fonctions ou que vous enchaînez avec des outils comme map().

Puis-je appliquer plusieurs conditions avec filter() ?

Absolument. Vous pouvez combiner plusieurs conditions à l'aide d'opérateurs logiques à l'intérieur de votre fonction de test ou de votre lambda. Pour une logique complexe, il est souvent préférable d'utiliser une fonction nommée pour que le code reste lisible.

Sujets

Apprenez Python avec DataCamp

Cours

Introduction to Python

4 h
6.3M
Master the basics of data analysis with Python in just four hours. This online course will introduce the Python interface and explore popular packages.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow