我需要一些帮助来使用reduce函数计算列表中元素的数量。
ALTER TABLE [YourTableName]
ADD CONSTRAINT [startBeforeEnd]
CHECK (
[EndTime] > [StartTime]
)
有了这个,我收到以下错误消息:
def lenReduce(L):
return reduce(lambda x: x + 1, L)
来自柏林的问候。 ; - )
答案 0 :(得分:1)
reduce
的函数参数有两个参数:前一个调用的返回值和列表中的一个项。
def counter(count, item):
return count + 1
在这种情况下,你并不关心item
的价值是什么;只需将其传递给counter
即表示您想要返回计数器的当前值加1。
def lenReduce(L):
return reduce(counter, L)
或使用lambda
表达式
def lenReduce(L):
return reduce(lambda count, item: count + 1, L)
即使你的函数忽略了第二个参数,reduce
仍然希望能够将它传递给函数,所以必须将它定义为接受两个参数。
答案 1 :(得分:0)
lenReduce([5,3,1])
返回7
这意味着,第一次调用lambda函数时,count
设置为5
,item
设置为3
,这是列表的前两个要素。从下一次调用lambda函数开始,count
递增。因此解决方案不起作用。
解决方案是将计数设置为我们选择的值而不是列表的第一个元素。为此,请使用三个参数调用reduce。
def lenReduce(L):
return reduce(lambda count, item: count + 1, L, 0)
在上面的reduce调用中,count
设置为0
,并且item将在每次迭代时设置为从索引0
开始的列表元素。
lenReduce([3,2,1])
输出3
这是期望的结果。