Introduction
En Python, nous pouvons regrouper les éléments d'une liste sur la base d'une fonction donnée. Cela peut être utile dans de nombreuses situations, par exemple lorsque nous voulons regrouper une liste de mots par leur longueur ou une liste de nombres par leur parité. Dans ce défi, vous devrez écrire une fonction qui regroupe les éléments d'une liste sur la base d'une fonction donnée.
Regrouper les éléments d'une liste
Écrivez une fonction group_by(lst, fn) qui prend une liste lst et une fonction fn en arguments et renvoie un dictionnaire dont les clés sont les résultats de l'application de fn aux éléments de lst et les valeurs sont des listes d'éléments de lst qui produisent la clé correspondante lorsqu'on leur applique fn.
Par exemple, si nous avons une liste de nombres [6.1, 4.2, 6.3] et que nous voulons les regrouper par leur partie entière, nous pouvons utiliser la fonction floor du module math comme fonction de regroupement. La sortie attendue serait {4: [4.2], 6: [6.1, 6.3]}.
from collections import defaultdict
def group_by(lst, fn):
d = defaultdict(list)
for el in lst:
d[fn(el)].append(el)
return dict(d)
from math import floor
group_by([6.1, 4.2, 6.3], floor) ## {4: [4.2], 6: [6.1, 6.3]}
group_by(['one', 'two', 'three'], len) ## {3: ['one', 'two'], 5: ['three']}
Sommaire
Dans ce défi, vous avez appris à regrouper les éléments d'une liste sur la base d'une fonction donnée. Vous avez également écrit une fonction qui le fait en utilisant un dictionnaire pour stocker les groupes et une boucle pour les remplir. Il s'agit d'une technique utile qui peut être appliquée dans de nombreux contextes différents.