Introduction
En Python, la différence symétrique entre deux listes est une nouvelle liste contenant tous les éléments qui se trouvent dans l'une ou l'autre des listes d'origine, mais pas dans les deux. Dans ce défi, nous allons écrire une fonction qui renvoie la différence symétrique entre deux listes, après avoir appliqué la fonction fournie à chaque élément de liste des deux.
Différence symétrique basée sur une fonction
Écrivez une fonction symmetric_difference_by(a, b, fn) qui prend deux listes a et b, et une fonction fn. La fonction devrait renvoyer une nouvelle liste contenant tous les éléments qui se trouvent dans l'une ou l'autre des listes d'origine, mais pas dans les deux, après avoir appliqué la fonction fournie à chaque élément de liste des deux.
Pour résoudre ce problème, vous pouvez suivre ces étapes :
- Créez un
ensembleen appliquantfnà chaque élément de chaque liste. - Utilisez une compréhension de liste en combinaison avec
fnpour chacun d'entre eux pour ne conserver que les valeurs qui ne sont pas contenues dans l'ensemble précédemment créé de l'autre. - Concaténez les deux listes obtenues à l'étape 2.
La fonction devrait avoir les paramètres suivants :
a: une liste d'élémentsb: une liste d'élémentsfn: une fonction qui prend un élément et renvoie une nouvelle valeur
La fonction devrait renvoyer une nouvelle liste contenant tous les éléments qui se trouvent dans l'une ou l'autre des listes d'origine, mais pas dans les deux, après avoir appliqué la fonction fournie à chaque élément de liste des deux.
def symmetric_difference_by(a, b, fn):
(_a, _b) = (set(map(fn, a)), set(map(fn, b)))
return [item for item in a if fn(item) not in _b] + [item
for item in b if fn(item) not in _a]
from math import floor
symmetric_difference_by([2.1, 1.2], [2.3, 3.4], floor) ## [1.2, 3.4]
Résumé
Dans ce défi, nous avons appris à écrire une fonction qui renvoie la différence symétrique entre deux listes, après avoir appliqué la fonction fournie à chaque élément de liste des deux. Nous avons utilisé un ensemble et une compréhension de liste pour y arriver.