当前位置: 首页 > 面试题库 >

减少功能如何工作?

艾泉
2023-03-14
问题内容

据我了解,reduce函数带有一个列表l和一个function
f。然后,它f在列表的前两个元素上调用该函数f,然后使用下一个列表元素和上一个结果重复调用该函数。

因此,我定义了以下功能:

以下函数计算阶乘。

def fact(n):
    if n == 0 or n == 1:
        return 1
    return fact(n-1) * n


def reduce_func(x,y):
    return fact(x) * fact(y)

lst = [1, 3, 1]
print reduce(reduce_func, lst)

现在,这不应该给我((1! * 3!) * 1!) = 6吗?但是,它给出了720。为什么720呢 似乎也需要析因6。但是,我需要了解原因。

有人可以解释为什么会发生这种情况以及解决方法吗?

我基本上想计算列表中所有条目的阶乘乘积。备份计划是运行循环并对其进行计算。但是,我更喜欢使用reduce。


问题答案:

好的,我知道了:

我需要先将数字映射到其阶乘,然后使用乘法运算符调用reduce。

因此,这将起作用:

lst_fact = map(fact, lst)
reduce(operator.mul, lst_fact)


 类似资料:
  • 我正在使用一个聚合函数,我已经在我的工作中使用了很长时间了。其思想是,如果传递给函数的序列长度为1(即组只有一个观察值),则返回该观察值。如果传递的序列长度大于1,则在列表中返回观察值。 对一些人来说,这可能看起来很奇怪,但这不是一个X,Y问题,我有充分的理由想做这个与这个问题无关的事情。 这是我一直在使用的函数: 现在由于某种原因,在我正在处理的当前数据集中,我得到了一个值错误,声明函数不减少。

  • 问题内容: 有什么办法可以限制celery的工人数量?我的服务器很小,celery总是在1个核心处理器上创建10个进程。我想将此数目限制为3个进程。 问题答案: 我尝试在我的settings.py文件中将并发设置为1,将max_tasks_per_child设置为1,并同时运行3个任务。它仅以用户的身份生成1个进程,而以Celery的形式生成其他2个进程。它应该只运行1个进程,然后等待它完成,然后

  • 问题内容: 假设我有一个布尔值流,而我正在编写的reduce操作是||(OR)。我是否可以这样编写它:如果true遇到值,则放弃对至少某些元素的求值? 我正在寻找某种程度的优化(也许是并行流),不一定要完全优化,尽管后者会很棒。 问题答案: 我怀疑您想要这种构造。 你可以看一下 Stream.of(1, 2, 3, 4).peek(System.out::println).anyMatch(i -

  • 问题内容: 我无法在快速工作区中渲染更少的CSS。 这是我当前的配置 (我的css / less文件 位于 “ public / stylo /”中) : 这是我的 main.jade文件 : 这是我的 main.less CSS : 这是我的好 东西 。 很酷的交易。现在: 我通过npm安装的次数较少, 并且从另一篇帖子中听说@imports应该引用而不是。在任何情况下,我已经试过了 组合 开关

  • 问题内容: 下面的程序根据需要运行,但是如何减少if语句的数量。有人告诉我,如果您的函数包含2个或更多if语句,那么您做错了。有什么建议?我试过使用switch语句,但这没有用,因为大小写不能是布尔值。 问题答案: 如何为案例创建方法: 然后,不是一堆东西,而是两个方法的调用集。您甚至可以创建一个调用上述两个方法的单个方法。 在上面的代码中,对我来说,问题的数量比重复代码的数量少。

  • 问题内容: 在JSF中减小viewstate隐藏字段大小的最佳方法是什么?我已经注意到,我的视图状态大约为40k,这会下降到客户端,并在每次请求和响应(尤其是到达服务器)时都返回到服务器,这对于用户来说是一个严重的问题。 我的环境JSF 1.2,MyFaces,Tomcat,战斧,RichFaces 问题答案: 您是否尝试过将状态保存设置为服务器?这应该仅将ID发送给客户端,并在服务器上保持完整状