python - 使用reduce()函数的列表长度

时间:2017-01-16 16:16:26

标签: python functional-programming reduce

我需要一些帮助来使用reduce函数计算列表中元素的数量。

ALTER TABLE [YourTableName] 
ADD CONSTRAINT [startBeforeEnd]
CHECK (
    [EndTime] > [StartTime]
)

有了这个,我收到以下错误消息:

def lenReduce(L):
  return reduce(lambda x: x + 1, L)

来自柏林的问候。 ; - )

2 个答案:

答案 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设置为5item设置为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这是期望的结果。