Funzioni di ordine superiore personalizzate

Funzioni come sort, max o min possono accettare argomenti come key= che sono funzioni e possono determinare il loro comportamento. Questo rende le funzioni incorporate sort e max molto più potenti e generiche. Possono essere utilizzate in molti più scenari rispetto a se confrontassero solo i valori stessi senza l'argomento key=.
Possiamo anche creare le nostre funzioni di ordine superiore:
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']
Qui passiamo diverse funzioni come f alla funzione di ordine superiore modify. La funzione modify crea una nuova lista a partire da quella di input e restituisce il risultato. Nota che possiamo anche passare una funzione come str alla funzione. Quindi, a ogni elemento della lista di input verrà applicata la funzione str() - str(2), str(0), str(1).

Sfida

Implementa una versione generica della funzione sum chiamata generic_sum che prende una collezione come primo argomento (può essere una lista, un set o una lista di tuple) e una funzione come secondo argomento che ottiene un numero da ogni elemento della collezione.
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