J'ai en tête quelque chose que je ferais en Haskell comme ceci :
f :: Int -> (Int, Int)
-- for example:
f = `divMod` 12
foo :: [Int] -> (Int, Int)
foo = map (fmap (+1) . f)
-- foo [10, 11, 12, 13] = [(0,11),(0,12),(1,1),(1,2)]
Est-il possible d'effectuer un tel mappage vers un tuple en Python de manière élégante (sans regarder à l'intérieur de l'application) ? f
?) Le mieux que j'ai pu trouver est :
def foo(lst):
for x in lst:
a, b = f(x)
yield a, b + 1
une autre possibilité est
def foo(lst):
return map(lambda x: (f(x)[0], f(x)[1]+1), lst)
Mais je n'aime aucune des deux solutions. Je n'aime pas la première, parce que ce n'est pas une expression unique et qu'elle ne pourrait pas être aussi facilement inlined. L'autre solution a cette propriété, mais elle est moche car elle appelle inutilement f()
deux fois à chaque itération. Est-il possible de décomposer le résultat à l'intérieur de l'itération ?