这就是我想出的。我定义了一个函数来计算列表中的最大元素,而第二个函数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)))
答案 0 :(得分:1)
您没有实现reduce函数。相反,您的myreduce()
函数实现了map higher-order function,为myfunc()
中的输入生成了一系列mylist
结果。映射时,所使用的函数应采用单个输入,并且每个输入都应独立处理,并且输出的结果顺序与产生它们的输入的顺序相同。
higher-order reduce operation将产生单个输出。减少意味着您可以迭代地从之前的减少操作中获取输出,并与下一个输入值一起调用该函数以产生下一个输出。因此,该函数需要两个输入,以使reduce操作正常工作。对于第一步,如果没有先前的输出,则可以从固定的起始值开始,或者仅从输入列表中获取两个输入。每一步产生新的输出时,先前的输出将被丢弃。最后,您只得到一个输出。
使用reduce产生[1, 2, 3]
的最大值可以从两个输入开始,一个简单的函数可以确定这两个输入的最大值。然后,该过程将执行以下步骤:
您的reduce实现必须做同样的事情:
Python 3已将其实现为functools.reduce()
,该文档实际上带有一个纯Python实现,您可以直接复制。