Introduction
En Python, nous pouvons utiliser la fonction set() pour obtenir l'union de deux listes. Cependant, parfois nous devons appliquer une fonction à chaque élément des deux listes avant d'obtenir l'union. Dans ce défi, vous devrez créer une fonction qui renvoie l'union de deux listes sur la base d'une fonction fournie.
Union de listes basée sur une fonction
Écrivez une fonction union_by(a, b, fn) qui prend deux listes a et b et une fonction fn. La fonction devrait renvoyer une liste qui contient chaque élément qui existe dans l'une ou l'autre des deux listes une fois, après avoir appliqué la fonction fournie à chaque élément des deux.
Pour résoudre ce problème, vous pouvez suivre les étapes suivantes :
- Créez un
ensembleen appliquantfnà chaque élément dea. - Utilisez une compréhension de liste en combinaison avec
fnsurbpour ne conserver que les valeurs qui ne sont pas contenues dans l'ensemble précédemment créé,_a. - Enfin, créez un
ensembleà partir du résultat précédent etaet convertissez-le enliste.
La fonction devrait avoir les paramètres d'entrée suivants :
a: une liste d'élémentsb: une liste d'élémentsfn: une fonction qui prend un élément et renvoie une valeur
La fonction devrait renvoyer une liste d'éléments.
def union_by(a, b, fn):
_a = set(map(fn, a))
return list(set(a + [item for item in b if fn(item) not in _a]))
from math import floor
union_by([2.1], [1.2, 2.3], floor) ## [2.1, 1.2]
Résumé
Dans ce défi, vous avez appris à créer une fonction qui renvoie l'union de deux listes sur la base d'une fonction fournie. Vous avez également appris à appliquer une fonction à chaque élément d'une liste, à créer un ensemble à partir d'une liste et à transformer un ensemble en liste.