La fonction filter en Python

Article publié le vendredi 10 février 2023 et mis à jour le vendredi 5 avril 2024.

Comment utiliser la fonction filter en Python ?

Qu’est-ce que la fonction native filter en Python ? Comment l’utiliser pour filter des itérables ? Découvrez tout sur cette fonction built-in en Python !

La fonction filter() est une fonction intégrée qu’on utilise pour filtrer les éléments d’une séquence (comme une liste ou un tuple). Elle prend une condition sous la forme d’une fonction qui renvoie True ou False et renvoie un itérateur avec les éléments pour lesquels la fonction a retourné True.

Pour filter une liste ou un autre type d’itérable en Python, on utilise la fonction native filter().

filter(fonction, iterable)

💡 Vous voulez en apprendre plus sur les fonctions comme filter() ? J’ai écrit un article qui reprend toutes les fonctions natives en Python.

Par exemple, pour filter les personnes à la retraite, on utilise :

personnes = [18, 23, 42, 61, 88]

travailleurs = filter(lambda age: age <= 62, personnes)

print(list(travailleurs))

Ce qui donne :

[18, 23, 42, 61]

💡 Vous ne comprenez pas cet exemple à cause de l’expression lambda ? Vous pouvez facilement comprendre cet exemple en lisant mon article sur les fonctions lambda.

Comment filter une liste en Python ?

La fonction filter prend 2 arguments : une fonction et un itérable.

filter(fonction, iterable)
  • la fonction est une fonction que vous voulez lui passer, elle doit retourner une valeur Truthy ou Falsy pour garder ou non L’élément dans la liste.
  • l’itérable est un objet Python de type list, tuple, dict, set ou n’importe quel autre type d’itérable.

Par exemple, si on une liste de dictionnaire de personnes et qu’on veut garder juste les personnes majeures, on peut faire quelque chose comme ça :

personnes = [{
  'nom': 'Bertrand',
  'age': 32
}, {
  'nom': 'François',
  'age': 60
}, {
  'nom': 'Thomas',
  'age': 30
}, {
  'nom': 'Loïc',
  'age': 9
}]

majeurs = filter(lambda personne: personne['age'] >= 18, personnes)

print(list(majeurs))

Ce qui donne :

[{'nom': 'Bertrand', 'age': 32}, {'nom': 'François', 'age': 60}, {'nom': 'Thomas', 'age': 30}]

Comment filter une liste sans utiliser filter ?

Bien que la fonction native filter soit un excellent moyen de filter des itérables, il existe d’autres types de filtrage en Python.

Voyons comment filtrer des listes sans utiliser la fonction filter de deux autres manières !

Avec une boucle for

On peut filter une liste en utilisant une boucle for en Python. Il faudra créer une liste vide à laquelle on ajoute les éléments qui correspondent à nos critères de filtrage.

Par exemple, voici un bout de code pour ne garder que les nombres pairs d’une liste de nombres :

nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9]
nombres_pairs = []

for nombre in nombres:
  if nombre % 2 == 0:
    nombres_pairs.append(nombre)

print(nombres_pairs)

Ce qui donne :

[2, 4, 6, 8]

Il est possible d’écrire ce bout de code de manière beaucoup plus “pythoniste” avec les compréhensions de listes, voyons ça ensemble avec cette autre manière de filter des éléments qui composent un itérable en python.

Avec une liste en compréhension

Une liste en compréhension est un manière pratique de créer des listes en une seule ligne.

Sa syntaxe est comme ça :

[element for element in liste if condition]

Par exemple, pour filter les nombres impaires d’une liste de nombres et ne garder que les nombres pairs, on peut avoir un code comme suit :

nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9]

nombres_pairs = [nombre for nombre in nombres if nombre % 2 == 0]

print(nombres_pairs)

Ce qui donne :

[2, 4, 6, 8]

💡 Vous souhaitez en apprendre plus sur moyen pour filtrer des listes en Python ? Alors vous serez sûrement intéressé par mon article sur les listes en compréhension.

Comment Coder

Je m'appelle Thomas. J'ai commencé à coder dans mon enfance. Depuis ma sortie de la première promo de l'École 42, j'ai développé des centaines d'applications et sites web. Sur ce blog, je vous donne les meilleurs conseils et astuces pour apprendre comment apprendre à coder efficacement.