Tuto Python : Trouver l'intersection de deux listes

Table des matières

Introduction

  1. Comment trouver l'intersection de deux listes en Python
  2. Utilisation de set pour trouver l'intersection de deux listes en Python

1.1. Conversion des listes en ensembles et utilisation de l'opérateur &

1.2. Conversion de listes en ensembles et utilisation de la méthode intersection()

  1. Utilisation de la compréhension de liste

2.1. Utiliser la compréhension de la liste pour créer une nouvelle liste d'intersections

2.2. Utiliser la compréhension des listes pour trouver l'intersection de deux listes avec des listes chaînées

  1. Utilisation de la fonction intégrée filter()

3.1. Utilisation de la fonction filter() pour trouver l'intersection de deux listes en Python

3.2. Utilisation de la fonction filter() avec une fonction lambda

  1. Quelle méthode utiliser ?
  2. Exercice 

5.1. Exercice 1

5.2. Exercice 2

5.3. Exercice 3

5.4. Exercice 4

  1. Solution

6.1. Exercice 1

6.2. Exercice 2

6.3. Exercice 3

6.4. Exercice 4

Conclusion

Introduction :

Dans ce tutoriel on va découvrir comment trouver l’intersection entre deux listes, avant de démarrer je vais vous expliquer la différence entre les liste et les ensembles, ensuite comment transformer une liste à un ensemble, et après comment trouver l’intersection et l’utilisation de l’opérateur & et la méthode intersection().

Je vais vous montrer après l’importance de la compréhension des listes pour créer une nouvelle liste d’intersection, et l’utilisation de la méthode filtre(), et finalement des exercices pour mieuxcomprendre.

1. Comment trouver l'intersection de deux listes en Python:

Il existe trois méthodes principales pour trouver l'intersection de deux listes en Python :

Utilisation des ensembles

Utilisation de la compréhension de liste

Utilisation de la fonction intégrée de filtre()

2. Utilisation de set pour trouver l'intersection de deux listes en Python :

La première méthode pour trouver l'intersection de deux listes en Python est de convertir les listes en ensembles et d'utiliser soit l'opérateur &, soit la méthode intégrée intersection().

Mais d'abord, qu'est-ce qu'un ensemble ?

Un ensemble est similaire à une liste, en ce sens qu'il peut être utilisé pour stocker une collection d'éléments (comme une collection de nombres).

Par exemple, nous pouvons créer un ensemble pour stocker les nombres 1, 22, 43, 64 et 57.

Pour ce faire, nous utilisons des accolades bouclées, comme le montre l'exemple ci-dessous :

Syntaxe :

monSet = {1, 22, 43, 64, 57}

Comme vous pouvez le voir, la création d'un ensemble est très similaire à la création d'une liste, sauf que le premier utilise des accolades bouclées tandis que le second utilise des crochets.

Un ensemble est en effet très similaire à une liste. Cependant, il existe quelques différences essentielles entre eux, comme l'explique le tableau ci-dessous :

Différences entre un ensemble et une liste :

Liste

Ensemble

Les articles sont commandés (c'est-à-dire que l'ordre des articles est important).

Ainsi, [1, 2, 3, 4] et [2, 3, 1, 4] sont considérés comme deux listes différentes

Les articles ne sont pas commandés (c'est-à-dire que l'ordre des articles n'est pas pris en compte).

Ainsi, {1, 2, 3, 4} et {2, 3, 1, 4} sont considérés comme un même ensemble

Il n'est pas nécessaire que les articles soient distincts.

[1, 1, 1, 2, 3] est acceptable

Les articles doivent être distincts.

{1, 1, 1, 2, 3} nous donne une erreur car le chiffre 1 apparaît plus d'une fois dans l'ensemble

Les articles ne doivent pas nécessairement être hachés*.

Les objets hachables font référence aux objets qui ont une valeur de hachage qui ne change jamais pendant leur durée de vie.

Les articles doivent être hachables*.

Les exemples d'éléments pouvant être hachés comprennent les nombres entiers, les nombres à virgule flottante et les chaînes de caractères.

Les listes imbriquées ou les dictionnaires sont des exemples d'éléments qui ne peuvent pas être hachés

Pour trouver l'intersection de deux listes en Python, nous pouvons convertir les listes en ensembles et utiliser l'opérateur intégré & ou la méthode intersection().

1.1. Conversion des listes en ensembles et utilisation de l'opérateur & :

Syntaxe :


liste1 = [1, 2, 3, 4, 5]
liste2 = [3, 4, 5, 6, 7]
set1 = set(liste1)
set2 = set(liste2)
intersection = list(set1 & set2)
print(intersection)

Résultat d’exécution :

Ici, nous déclarons d'abord deux listes - liste1 et liste2 - sur les lignes 1 et 2.

Ensuite, sur les lignes 4 et 5, nous utilisons la fonction set() pour convertir les listes en ensembles.

Sur la ligne 7, nous utilisons l'opérateur & pour trouver l'intersection entre les deux ensembles. Cet opérateur renvoie un nouvel ensemble avec des éléments communs aux deux ensembles 1 et 2. Nous passons cet ensemble résultant à la fonction list() pour le reconvertir en une liste et assigner la liste résultante à l'intersection.

Enfin, nous imprimons la valeur de l'intersection sur la ligne 9.

1.2. Conversion de listes en ensembles et utilisation de la méthode intersection() :

Ensuite, examinons un exemple qui utilise la méthode intersection().

Alors que l'opérateur & ne peut être utilisé que sur deux ensembles, la méthode intersection() peut être utilisée avec d'autres types d'itérables, tels qu'une liste ou un tuple

Syntaxe :

.intersection()

Syntaxe :


liste1 = [1, 2, 3, 4, 5]
liste2 = [3, 4, 5, 6, 7]
set1 = set(liste1)
intersection = list(set1.intersection(liste2))
print(intersection)

Résultat d’exécution :

Ici, nous ne convertissons que la liste1 en un ensemble. En effet, nous pouvons passer une liste (par exemple list2) directement à la méthode intersection(), sans avoir à convertir la liste en un ensemble.

Nous faisons cela à la ligne 6, où nous utilisons set1 pour appeler la méthode intersection() et passer list2 en argument à la méthode.

Cette méthode retourne un ensemble. Nous convertissons le set en une liste en utilisant la fonction list(), et nous attribuons le résultat à l'intersection.

Enfin, nous imprimons la valeur de l'intersection sur la ligne 8.

Erreur dans la conversion des listes en ensembles :

Enfin, prenons un exemple où nous sommes incapables de convertir une liste en un ensemble. Cela se produit lorsqu'un ou plusieurs éléments de la liste ne sont pas hachables*. Par exemple, si la liste comporte une liste imbriquée (qui n'est pas hachable*), nous obtiendrons une erreur lorsque nous essaierons de convertir la liste en un ensemble.

* Les objets hachables font référence aux objets qui ont une valeur de hachage qui ne change jamais pendant leur durée de vie.

Syntaxe :


liste1 = [1, 2, 3, 4, 5, [7, 8, 9]]
set1 = set(liste1)

Résultat d’exécution :

2. Utilisation de la compréhension de liste :

Dans la section précédente, nous avons vu comment nous pouvons convertir des listes en ensembles et utiliser la méthode & ou intersection() pour trouver l'intersection de deux listes en Python.

Cependant, nous avons également vu comment cela peut échouer lorsque nos listes contiennent des éléments non modifiables (comme une liste chaînée).

Dans de tels cas, nous pouvons utiliser la compréhension des listes pour trouver l'intersection de deux listes. Cela ne nous oblige pas à convertir une liste en un ensemble.

Syntaxe :

[ ]

2.1. Utiliser la compréhension de la liste pour créer une nouvelle liste d'intersections :

Supposons que nous ayons deux listes - la liste 1 et la liste 2.

Si nous voulons ajouter des éléments de la liste 2 à une nouvelle liste appelée "intersection", uniquement lorsque l'élément de la liste 2 est également dans la liste 1, nous pouvons utiliser le code ci-dessous :

Syntaxe :


liste1 = [1, 2, 3, 4]
liste2 = [3, 4, 5, 6]
intersection = [x for x in liste2 if x in liste1]
print(intersection)

Résultat d’exécution :

2.2. Utiliser la compréhension des listes pour trouver l'intersection de deux listes avec des listes chaînées :

Ensuite, examinons un autre exemple où les listes contiennent des listes chaînées.

Syntaxe :


liste1 = [1, 2, [12, 5], [6, 7], 9, 10]
liste2 = [2, [6, 7], 15, 17]
intersection2 = [x for x in liste2 if x in liste1]
print(intersection2)

Résultat d’exécution :

3. Utilisation de la fonction intégrée filter():

Enfin, regardons la troisième méthode pour trouver l'intersection de deux listes en Python - en utilisant la fonction filter().

La fonction filter() est une fonction intégrée en Python qui accepte deux arguments - une fonction qui définit les critères de filtrage et une itérable à filtrer.

Supposons que nous ayons une liste appelée numéros, définie comme suit :

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

Si nous voulons filtrer tous les nombres pairs de la liste, nous pouvons définir une fonction qui renvoie True lorsqu'elle passe un nombre pair.

Nous pouvons alors passer cette fonction et la liste des nombres à la fonction filter().

Voyons un exemple de la façon dont cela fonctionne :

Syntaxe :


numeros = [1, 2, 3, 4, 5, 6, 7, 8]
def isEven(x):
if x%2 == 0:
return True
numeros_pair = list(filter(isEven, numeros))
print(numeros_pair)
print(numeros)

Résultat d’exécution :

Ici, nous définissons d'abord la liste des numéros sur la ligne 1.

Ensuite, nous définissons une fonction appelée isEven() qui accepte un argument x et renvoie True si x est pair (c'est-à-dire si x donne un reste de zéro lorsqu'il est divisé par 2).

Ensuite, nous appelons la fonction filter() sur la ligne 7, en passant le nom de la fonction (isEven) et le nom itérable (numeros) à la fonction.

La fonction filter() renvoie un objet filtre qui peut être converti en une liste, en utilisant la fonction intégrée list().

Nous faisons cela à la ligne 7 et nous assignons la liste résultante à une variable appelée numeros_pair.

Enfin, nous imprimons les valeurs des numéros pairs et des nombres sur les lignes 9 et 10.

3.1. Utilisation de la fonction filter() pour trouver l'intersection de deux listes en Python :

Syntaxe :


liste1 = [1, 2, 3, 4]
liste2 = [3, 4, 5, 6]
def intersectListe1(x):
if x in liste1:
return True
intersection = list(filter(intersectListe1, liste2))
print(intersection)

Résultat d’exécution :

Ici, nous définissons d'abord une fonction appelée intersectListe1() sur les lignes 4 à 6. Cette fonction renvoie True si x est dans list1.

Ensuite, nous utilisons la fonction pour filtrer liste2 sur la ligne 8. Nous passons également l'objet filtre résultant à la fonction list() pour le convertir en une liste.

Enfin, nous imprimons la valeur de la liste résultante sur la ligne 10.

3.2. Utilisation de la fonction filter() avec une fonction lambda :

Ensuite, regardons un autre exemple d'utilisation de la fonction filter() pour trouver l'intersection de deux listes en Python. Cette fois, au lieu de passer une fonction nommée à la fonction, nous allons passer une fonction lambda.

Syntaxe :


liste1 = [1, 2, 3, 4]
liste2 = [3, 4, 5, 6]
intersection = list(filter(lambda x: x in liste1, liste2))
print(intersection)

Résultat d’exécution :

4. Quelle méthode utiliser ? :

Maintenant que nous avons traité trois méthodes différentes pour trouver l'intersection de deux listes en Python, discutons de certains facteurs à prendre en compte pour choisir la méthode à utiliser.

Le premier facteur à prendre en compte est de savoir si votre liste contient des éléments non hachables* (comme une liste chaînée).

Si c'est le cas, vous devrez utiliser soit la compréhension de la liste, soit la fonction filter().

Ensuite, le deuxième facteur à prendre en compte est de savoir si votre liste contient des éléments en double. Si votre liste comporte des éléments en double et que vous souhaitez que l'intersection tienne compte de ces éléments, aucune des méthodes ci-dessus n'est idéale.

Exemple :

Syntaxe :


liste1 = [1, 2, 3, 3, 5, 5, 6, 7, 8]
liste2 = [1, 3, 3, 3, 5, 6, 6, 9]
# Example 1: utilisation des ensembles
set1 = set(liste1)
set2 = set(liste2)
intersect_1 = list(set1 & set2)
intersect_2 = list(set1.intersection(liste2))
print('utilisation des ensembles')
print(intersect_1)
print(intersect_2)
# Example 2: comprehension des listes
intersect_3 = [x for x in liste1 if x in liste2]
intersect_4 = [x for x in liste2 if x in liste1]
print('comprehension des listes')
print(intersect_3)
print(intersect_4)
# Example 3: filter()
intersect_5 = list(filter(lambda x : x in liste1, liste2))
intersect_6 = list(filter(lambda x : x in liste2, liste1))
print(' filter ')
print(intersect_5)
print(intersect_6)

Résultat d’exécution :

5. Exercice :

5.1.  Exercice 1 :

Transformer les liste suivante à des ensembles et trouver l’intersection entre eu par l’operateur & :

liste1 = [1,2,3,4,5]

liste2 = [4,5,6,7,8]

Afficher les résultats

5.2.  Exercice 2 :

Créer les listes suivantes et trouver l’intersection par la méthode intersection()

liste1 = [10,20,30,40]

liste2 = [30,40,50,60]

5.3. Exercice 3 :

Ajouter l’éléments de la liste2 dans une nouvelle liste intersection seulement si l’élément existe dans la liste1.

Liste1=[1 ,2,3,4,5,6,7,8,9,10}

Liste2=[0,’a’,2,’b’,4,7,9]

Afficher le résultat.

5.4.  Exercice 4 : 

Trouver l’intersection entre les deux listes à l’aide de la méthode filtre()

liste1 = [10, 20, 30, 40]

liste2 = [30, 40, 50, 60]

6. Solution :

6.1.  Exercice 1 :

Syntaxe :


liste1 = [1, 2, 3, 4, 5]
liste2 = [ 4, 5, 6, 7,]
set1 = set(liste1)
set2 = set(liste2)
intersection = list(set1 & set2)
print(intersection)

Résultats de l’affichage :

6.2.  Exercice 2 :

Syntaxe :


liste1 = [10, 20, 30, 40]
liste2 = [30, 40, 50, 60]
set1 = set(liste1)
intersection = list(set1.intersection(liste2))
print(intersection)

Résultats de l’affichage :

6.3.  Exercice 3 :

Syntaxe :


liste1 = [1, 2, 3, 4,5,6,7,8,9,10]
liste2 = [0,'a',2, 'b',4, 7, 9]
intersection = [x for x in liste2 if x in liste1]
print(intersection)

Résultats de l’affichage :

6.4.  Exercice 4 :

Syntaxe :


liste1 = [10, 20, 30, 40]
liste2 = [30, 40, 50, 60]
def intersectListe1(x):
if x in liste1:
return True
intersection = list(filter(intersectListe1, liste2))
print(intersection)

Résultats de l’exécution :

Conclusion

Dans ce tutoriel d'exemples Python, nous avons découvrir comment trouver l’intersection entre 2 liste ou bien 2 ensembles.

 L’importance de compréhension des listes pour réaliser l’intersection, et l’utilisation de la méthode filtre(), et filtre() avec lambda(), j’espère que vous avez bien compris ce chapitre.

Article publié le 31 Janvier 2021par Mouhtat Bilal