如何通过模仿Python中的reduce函数来找到列表中的最大整数?

2024-09-29 01:34:41 发布

您现在位置:Python中文网/ 问答频道 /正文

所以这就是我想到的。我定义了一个函数来计算列表中的最大元素,而第二个函数myreduce不起作用

我不明白为什么我的逻辑有缺陷。我是编程新手。帮忙吗?在

def maxoflist(l):       #function to compute the maximum element in a list
    maxi=l[0]
    for i in l:
        if i>maxi:
            maxi=i
    return maxi

def myreduce(myfunc,mylist): #this is where I'm trying to mimic the 
    res=[]                   #reduce function
    for i in mylist:
        res.append(myfunc(i))          
    return res
l=[1,2,3]
print(list(myreduce(maxoflist,l)))

Tags: theto函数inforreturndeffunction
1条回答
网友
1楼 · 发布于 2024-09-29 01:34:41

你没有实现reduce函数。您的myreduce()函数实现了map higher-order function,为mylist中的输入生成一系列myfunc()结果。当映射时,所使用的函数应该是一个单一的输入,并且每个输入都是独立处理的,并且结果输出序列是按照与产生它们的输入相同的顺序给出的。在

higher-order reduce operation将产生一个单个输出。reduce意味着您迭代地从前面的reduce操作获取输出,并与下一个输入值一起调用该函数以生成下一个输出。因此,函数需要两个输入,reduce操作才能正常工作。对于第一步,如果没有前面的输出,您可以从一个固定的起始值开始,或者从输入列表中获取两个输入。随着每一步产生新的输出,先前的输出被丢弃。最后只有一个输出。在

使用reduce生成[1, 2, 3]的最大值可以从两个输入开始,并使用一个简单的函数来确定这两个输入的最大值。然后,该过程将执行以下步骤:

  • 将第一个输入1作为起始“输出”值。如果没有进一步的输入,这将是最终结果。在
  • 使用上一步中的初始输出1和下一个输入值2,并使用这两个值调用函数。1和2的最大值是2,所以这就是函数作为第一个输出结果生成的结果。在
  • 使用上一个操作中的2和下一个输入3再次调用函数。2和3的最大值是3,所以这就是函数作为新输出产生的结果。在
  • 没有更多的输入,输出是3。在

您的reduce实现必须执行相同的操作:

  • 从“output”的给定起始值开始,或从输入列表中获取第一个值。在
  • 对于输入列表(剩余部分)中的每个值,使用最后的输出和值调用函数,返回值将替换输出。在
  • 处理完所有值后,返回输出。在

Python3将其实现为^{},文档实际上附带了一个可以直接复制的纯Python实现。在

相关问题 更多 >