Tutoriel python : Filtrer les éléments d'une liste

Tables de matières

Introduction

  1. Filtrer une liste de chaînes en utilisant la méthode filter ()
  2. Filtrer avec la compréhension de liste
  3. Filtrer une liste python avec condition
  4. Filtrer un liste Python avec endswith () et startswith ()
  5. Filtrer une liste de chaînes à l'aide d'une expression lambda
  6. Filtrer un liste Python avec index()
  7. Filtrer une liste de dictionnaires
  8. Utiliser NONE avec filtre ()
  9. Filtrer une liste Python avec un générateur
  10. Exercices

10.1 Exercice 1

10.2 Exercice 2

10.3 Exercice 3

  1. Solution des exercices

11.1 Exercice 1

11.2 Exercice 2

11.3 Exercice 3

Conclusion

Introduction

Python utilise le type de données “liste“ pour stocker plusieurs données dans un index séquentiel. Filter () est une méthode Python très importante. Les valeurs de données peuvent être filtrées à partir de n'importe quelle liste de chaînes, d'entiers, de dictionnaires… en utilisant la méthode filter () et d'autres méthodes que nous allons découvrir. Le filtrage d'une liste ne conserve que les éléments de la liste satisfaisant une condition donnée, il conserve les données lorsque la condition retourne true et les ignore lorsqu'elle retourne false. Alors, comment les données d'une liste peuvent-elles être filtrées en Python ? Nous allons découvrir ceci avec de multiples exemples et méthodes.

1. Filtrer une liste de chaînes en utilisant la méthode filter ()

La méthode filter () accepte deux paramètres. Le premier paramètre prend un nom de fonction ou None et le second paramètre prend le nom de la variable de la liste comme valeurs. filter () stocke ces données de la liste si elle renvoie true, sinon, elle rejette les données.  En termes simples, la méthode filter () filtre l'itérable donné à l'aide d'une fonction qui teste si chaque élément de l'itérable est vrai ou non.

Syntaxe 

filtre (fonction, itérable)

Paramètres

La méthode filter () prend deux paramètres:

  • function - fonction qui teste si les éléments d'un itérable retournent vrai ou faux ,si aucun, la fonction utilise par défaut la fonction Identity - qui retourne false si les éléments sont faux.
  • iterable – l’iterable qui doit être filtré, il peut être des ensembles, des listes, des tuples ou des conteneurs de n'importe quel itérateur.

Exemple

Dans cet exemple, nous allons filtrer une liste de lettres avec des voyelles :

Syntaxe

# liste de lettres
lettres = ['a', 'b', 'd', 'e', 'i', 'j', 'o']
# fonction qui filtre les voyelles
def filterVoyelles (lettre):
voyelles = ['a', 'e', 'i', 'o', 'u']
if (lettre in voyelles):
return True
else:
return False
VoyellesFiltrées = filter(filterVoyelles, lettres)
print ('Les voyelles filtrées sont:')
for voyelle in VoyellesFiltrées:
print (voyelle)

Résultat d’exécution

2. Filtrer avec la compréhension de liste

Le moyen le plus pythonique de filtrer une liste est l'énoncé de compréhension de liste [x pour x dans une liste si condition]. Vous pouvez remplacer la condition par n'importe quelle fonction de x que vous souhaitez utiliser comme condition de filtrage.

Par exemple, si vous devez filtrer tous les éléments inférieurs à 100, vous devez utiliser l'instruction de compréhension de liste [x pour x dans la liste si x pour générer une nouvelle liste avec toutes les listes d'éléments qui sont plus petites plus de 100.

Exemple

Liste = [8, 2, 6, 4, 3, 1,7]

Dans cet exemple, nous allons filtrer la liste avec les critères suivants :

  • Obtenir les éléments inférieurs à huit.
  • Récupérer les éléments pairs.
  • Récupérer les éléments impairs.

Syntaxe 

liste = [9,8, 2, 6, 4, 3, 1,7]
# Filtrer tous les éléments petit = [x for x in liste if x print ("éléments inférieurs à 8:",petit)
# Filtrer tous les éléments pairs
pair = [x for x in liste if x% 2 == 0]
print ("éléments pairs :",pair)
# Filtrer tous les éléments impairs
impair = [x for x in liste if x% 2]
print ("élément impairs :",impair)

Résultat d’exécution 

3. Filtrer une liste python avec condition

Vous pouvez définir n'importe quelle condition compliquée sur un élément de liste pour décider de le filtrer ou non. Créez simplement votre propre fonction (par exemple, la condition (x)) qui prend un élément de la liste comme entrée et renvoie la valeur booléenne True si la condition est remplie ou False dans le cas contraire.

Exemple

liste = [11,4,6, 14, 3, 0, -1, -3]

Essayons de ne tirer de cette liste que les nombres entre 0 et 10

Syntaxe 

liste = [11,4,6, 14, 3, 0, -1, -3]
def condition(x):
return x0
résultat= [x for x in liste if condition(x)]
print(résultat)

Résultat d’exécution

4. Filtrer un liste Python avec endswith () et startswith ()

Étant donné une liste de chaînes. Comment filtrer ceux qui commencent par une autre chaîne (ou se terminent par une autre chaîne) ? En d'autres termes, vous voulez obtenir toutes les chaînes qui ont une autre chaîne comme préfixe ou suffixe. Dans ce cas, vous pouvez utiliser les fonctions startwith () et endwith () pour filtrer la liste.

Exemple

Par exemple nous avons une liste ['Ali', 'Annie', 'Anna', 'Tom'] et vous voulez obtenir tous les éléments qui commencent par 'An'. Vous vous attendez à ce que la liste filtrée soit ['Annie', 'Anna'].

Syntaxe

import re
noms = ['Ali', 'Annie', 'Anna', 'Tom']
# Filtrer tous les éléments commençant par 'An'
résultat = [x for x in noms if x.startswith('An')]
print(résultat)

Résultat d’exécution

5. Filtrer une liste de chaînes à l'aide d'une expression lambda

La fonction filter (function, iterable) prend une fonction de filtre comme argument qui prend un élément de liste comme entrée et renvoie la valeur booléenne True si la condition est remplie ou False dans le cas contraire. Cette fonction décide si un élément est inclus dans la liste filtrée ou non.

Pour définir cette fonction, vous pouvez utiliser le mot clé lambda. La fonction lambda est une fonction anonyme - considérez-la simplement comme une fonction jetable qui n’est nécessaire qu’en tant qu’argument et pour rien d’autre dans le code.

Exemple

Voici un code qui montre comment filtrer une liste à l'aide de la fonction lambda pour filtrer une liste et renvoyer uniquement les valeurs impaires de la liste.

Syntaxe

liste = [1, 2, 3, 4,11,14,6,9]
print(list(filter(lambda x: x%2, liste)))

6. Filtrer un liste Python avec index()

La méthode list index () vous aide à trouver le premier index le plus bas de l'élément donné. S'il y a des éléments en double dans la liste, le premier index de l'élément est retourné, utilisons cette méthode pour filtrer une liste !

Exemple 

Nous avons une liste ['Ali', 'Bob', 'Annie', 'Frank'] et les indices [0, 1]. Vous recherchez la liste filtrée ['Ali', 'Bob'].

Nous allons passer en revue tous les indices de la deuxième liste et inclure les éléments de liste correspondants en utilisant une simple déclaration de compréhension de liste [liste [i] for i in indices].

Syntaxe

liste = ['Ali', 'Bob', 'Annie', 'Frank']
indices = [0, 1]
résultat = [liste[i] for i in indices]
print(résultat)

Résultat d’exécution

7. Filtrer une liste de dictionnaires

Étant donné une liste de dictionnaires. Chaque dictionnaire se compose d'une ou plusieurs paires (clé, valeur). Nous allons découvrir la manière de filtrer ces dictionnaires par valeur d'une clé de particulière (attribut).

Exemple :

Prenons l'exemple suivant où vous avez trois dictionnaires des étudiants avec des clés de nom, d'âge et de score. Vous souhaitez obtenir une liste de tous les utilisateurs qui remplissent une certaine condition, telle qu'un score> 100.

Syntaxe :

Etudiants = [{'nom': 'ali', 'age': 23, 'score': 150},
{'nom': 'bob', 'age': 32, 'score': 188},
{'nom': 'annie', 'age': 27, 'score': 90},]
Résultat = [Etudiant for Etudiant in Etudiants if Etudiant['score']>100]
print(Résultat)

Résultat d’exécution :

Nous avons utilisé la compréhension de liste [x pour x dans lst if condition (x)] pour créer une nouvelle liste de dictionnaires qui remplissent la condition. Tous les dictionnaires de la liste qui ne remplissent pas la condition sont exclus. Vous pouvez définir votre propre condition sur l'élément de liste x.

8. Utiliser NONE avec filtre ()

Nous pouvons passer None comme premier argument à filter () pour que l'itérateur renvoyé filtre toute valeur que Python considère comme « falsifiée ». Python traite tout ce qui a une longueur de 0 ou numériquement équivalente à 0 comme une valeur fausse

Exemple :

À titre d'exemple, nous avons la liste suivante qui contient différents types de données, des entiers, des séquences vides et une valeur booléenne.

Liste = [2, False, 8, 1, "", 12, 74, 0, [], {},True]

Nous utilisons la fonction filter () avec None pour vérifier si dans la liste des valeurs fausses, on retourne une liste uniquement avec des valeurs True

Syntaxe :

Liste = [2, False, 8, 1, "", 12, 74, 0, [], {},True]
résultat = filter(None, Liste)
print('les éléments filtrés sont:')
for élément in résultat:
print(élément)

Résultat d’exécution :

9. Filtrer une liste Python avec un générateur

Une expression de générateur crée un itérateur sur une séquence de valeurs. Cela fonctionne comme la compréhension de liste, mais sans créer de type de données de liste. C'est un peu plus efficace.

Vous pouvez utiliser des expressions de générateur dans tout appel de fonction qui nécessite un itérable comme entrée. Par exemple, si vous souhaitez calculer la somme de toutes les valeurs qui remplissent une certaine condition dans une liste, suivez les étapes suivantes :

  • Tout d'abord, déterminez l'itérable des valeurs qui remplissent une certaine condition.
  • Deuxièmement, additionnez toutes ces valeurs à l'aide de la fonction sum ().

Voici un exemple de code qui montre comment additionner toutes les valeurs entières dans une liste= [7, 8, 5, 4, 'Ali', 'Bob'] (sans tenir compte du reste) à l'aide d'une expression de générateur pour filtrer ces non-entiers.

Syntaxe :

liste = [7, 8, 5, 4, 'Ali', 'Bob']
print(sum(x for x in liste if type(x) == int))

Résultat d’exécution:

Vous vérifiez le type (x) de chaque élément et vous le comparez au type entier. Cette comparaison renvoie True si l'élément est, en fait, de type entier.

10. Exercices

10.1 Exercice 1

Considérez la liste suivante :  liste = [2,3,0, -1, -2,5, -6] . Utiliser une condition pour filtrer de cette liste uniquement les éléments négatifs.

10.2 Exercice 2

Considérez la liste suivante : Liste = [[0, 1, 2, 3, 5, 8, 13,4,8]. Utilisez l'expression lambda avec la méthode filter () pour filtrer les nombres impairs et pairs.

10.3 Exercice 3

Considérez la liste suivante : Fruits = ['pomme', 'orange', 'mangue', 'raisin', 'poire', pastèque]. Utilisez la compréhension de liste + startswith () pour obtenir uniquement les fruits commençant par « p » et « o » .

11. Solution des exercices

11.1 Exercice 1

liste = [2,3,0, -1, -2,5, -6]

Obtenons les nombres négatifs de la liste donnée :

Syntaxe :

liste = [2,3,0, -1, -2,5, -6]
def condition(x):
return xrésultat= [x for x in liste if condition(x)]
print(résultat)

Résultat d’exécution 

11.2 Exercice 2

Liste = [[0, 1, 2, 3, 5, 8, 13,4,8]. Obtenons les nombres pairs et impairs de la liste donnée :

Syntaxe

liste = [0, 1, 2, 3, 5, 8, 13,4,8]
print("les nombres impairs :",list(filter(lambda x: x%2, liste)))
print("les nombres pairs :",list(filter(lambda x: x%2==0, liste)))

Résultat d’exécution

11.3 Exercice 3

Fruits = ['pomme', 'orange', 'mangue', 'raisin', 'poire', pastèque]

Obtenons seulement les noms qui commencent par p et o :

Syntaxe :

Fruits = ['pomme', 'orange', 'mangue', 'raisin', 'poire', 'pastèque']
résultat = [x for x in Fruits if x.startswith('p')]
résultat1 = [x for x in Fruits if x.startswith('o')]
print(résultat)
print(résultat1)

Résultat d’exécution 

Conclusion

Dans ce tutoriel, nous avons vu quelques méthodes de filtrage de liste en Python. Nous avons utilisé la compréhension de liste, ce qui est utile pour sa lisibilité. Nous avons également découvert les expressions génératrices que nous utilisons si nous voulons éviter de générer des éléments indésirables.

Article publié le 25 Décembre 2020par Mouhtat Bilal