【发布时间】:2018-05-02 04:03:48
【问题描述】:
我必须使用函数式编程来实现以下函数,接收从 0 到 9 的数字列表。目标是找到列表中积最大的五个连续元素。该函数应该返回最大乘积的索引和最大乘积的值的元组不使用 max 函数。
我可以在没有函数式编程的情况下轻松实现它,但是在没有任何循环的情况下我很难实现它。 到目前为止,这是我的方法,但我坚持的部分是如何遍历数组以找到那些没有循环的连续五个数字。我正在尝试使用 map 来做到这一点,但我认为它不正确。是否可以以任何方式合并枚举?任何帮助表示赞赏。
def find_products(L):
val = map(lambda a: reduce(lambda x,y: x*y, L),L)
print (val)
【问题讨论】:
-
map和reduce在幕后使用loops,例如试图避免在list-comprehensions中使用循环将非常困难并且没有真正的好处。 -
如果您使用递归,您几乎可以直接避免循环。 Haskell 就是这样做的。然而,Haskell 对此进行了优化,而 Python 可能没有。因此,您将很快遇到最大递归深度。 — 无论如何,你以实用的方式来做这件事的动机是什么?
-
函数式编程 =/= 避免循环。
-
我意识到你说
max是不允许的,但值得注意的是,在真正的函数式编程中,最好的方法可能是使用带有滑动窗口迭代器的 max 函数(例如max(sliding(L, 5), key=product)用于sliding和product的适当定义)。 -
IMO,循环与递归只是顺序思维与分而治之的一个实例。
标签: python list lambda functional-programming