Fonctions d'ordre supérieur personnalisées

Des fonctions comme sort, max ou min peuvent prendre des arguments comme key= qui sont des fonctions et qui peuvent déterminer leur comportement. Cela rend les fonctions intégrées sort et max beaucoup plus puissantes et générales. Elles peuvent être utilisées dans bien plus de scénarios que si elles ne comparaient que les valeurs elles-mêmes sans l'argument key=.
Nous pouvons également créer nos propres fonctions d'ordre supérieur :
def modify(numbers, f):
    res = [f(n) for n in numbers]
    return res

print(modify([1, 2, 3], lambda x: x**2))   # [1, 4, 9]
print(modify([1, 2, 3], lambda x: -x))     # [-1, -2, -3]
print(modify([2, 0, 1], lambda x: 2 * x))  # [4, 0, 2]
print(modify([2, 0, 1], str))              # ['2', '0', '1']
Ici, nous passons différentes fonctions en tant que f à la fonction d'ordre supérieur modify. La fonction modify crée une nouvelle liste à partir de celle d'entrée et renvoie le résultat. Notez que nous pouvons même passer une fonction comme str à la fonction. Ainsi, chaque élément de la liste d'entrée sera transformé par la fonction str() : str(2), str(0), str(1).

Défi

Implémentez une version générique de la fonction sum appelée generic_sum qui prendra une collection comme premier argument (il peut s'agir d'une liste, d'un ensemble ou d'une liste de tuples) et une fonction comme second argument qui obtient un nombre à partir de chaque élément de la collection.
def generic_sum():
    ...

print(generic_sum([1, 2, 3], lambda x: x))                   # 6
print(generic_sum({1, 2, 3}, lambda x: x))                   # 6
print(generic_sum([(1, 3), (4, 6)], lambda x: x[0] + x[1]))  # 14
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue