我想我会在哈斯凯尔这样做:
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)]
有没有可能在Python中优雅地(不看内部f
)完成这样的映射到元组吗我能做的最好的就是:
另一种可能是
def foo(lst):
return map(lambda x: (f(x)[0], f(x)[1]+1), lst)
但这两种方法我都不喜欢。我不喜欢第一个表达式,因为它不是一个单独的表达式,不能很容易地内联。另一个解决方案有这个属性,但是它很难看,因为它在每次迭代中不必要地调用f()
两次。有没有可能在迭代中以某种方式解包结果?在
只需先将
lst
映射到f
:好吧,我找到了一个解决方案,它具有两个所需的属性,但它的可读性不强:
相关问题 更多 >
编程相关推荐