Différence de listes basée sur une fonction

PythonPythonBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

En Python, il est facile de trouver la différence entre deux listes en utilisant la fonction intégrée set(). Cependant, que faire si on veut trouver la différence en fonction d'une fonction spécifique appliquée à chaque élément des deux listes? Dans ce défi, vous devrez créer une fonction qui prend deux listes et une fonction en paramètre, et qui renvoie la différence entre les deux listes après avoir appliqué la fonction fournie à chaque élément des deux listes.

Différence de listes basée sur une fonction

Créez une fonction appelée difference_by(a, b, fn) qui prend trois paramètres :

  • a : une liste d'éléments
  • b : une liste d'éléments
  • fn : une fonction qui sera appliquée à chaque élément des deux listes

La fonction devrait renvoyer une liste d'éléments qui sont dans la liste a mais pas dans la liste b, après avoir appliqué la fonction fn fournie à chaque élément des deux listes.

Pour résoudre ce problème, vous pouvez suivre ces étapes :

  1. Créez un set, en utilisant map() pour appliquer fn à chaque élément de b.
  2. Utilisez une compréhension de liste en combinaison avec fn sur a pour ne conserver que les valeurs qui ne sont pas contenues dans le set précédemment créé, _b.
def difference_by(a, b, fn):
  _b = set(map(fn, b))
  return [item for item in a if fn(item) not in _b]
from math import floor

difference_by([2.1, 1.2], [2.3, 3.4], floor) ## [1.2]
difference_by([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], lambda v : v['x'])
## [ { x: 2 } ]

Sommaire

Dans ce défi, vous avez appris à trouver la différence entre deux listes en fonction d'une fonction spécifique appliquée à chaque élément des deux listes. Vous avez également pratiqué l'utilisation de map(), set() et des compréhensions de liste pour résoudre le problème.