Python 进阶 (三) 函数式编程之 reduce()
一、前言
官方解释如下:
Apply function of two arguments cumulatively to the items of sequence, from left to right, so as to reduce the sequence to a single value. For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1+2)+3)+4)+5). The left argument, x, is the accumulated value and the right argument, y, is the update value from the sequence. If the optional initializer is present, it is placed before the items of the sequence in the calculation, and serves as a default when the sequence is empty. If initializer is not given and sequence contains only one item, the first item is returned.
格式: creduce (func, seq[, init()])
reduce()
函数即为化简函数,它的执行过程为:每一次迭代,都将上一次的迭代结果(注:第一次为init
元素,如果没有指定 init 则为 seq 的第一个元素)与下一个元素一同传入二元func
函数中去执行。在reduce()
函数中,init 是可选的,如果指定,则作为第一次迭代的第一个元素使用,如果没有指定,就取 seq 中的第一个元素。
二、举例
有一个序列集合,例如[1,1,2,3,2,3,3,5,6,7,7,6,5,5,5],统计这个集合所有键的重复个数,例如 1 出现了两次,2 出现了两次等。大致的思路就是用字典存储,元素就是字典的 key,出现的次数就是字典的 value。方法依然很多第一种:for 循环判断
第二种:比较取巧的,先把列表用set
方式去重,然后用列表的count
方法。
第三种:用reduce
方式
通过上面的例子发现,凡是要对一个集合进行操作的,并且要有一个统计结果的,能够用循环或者递归方式解决的问题,一般情况下都可以用reduce
方式实现。
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/edcee5533f6197e377ae7da00】。文章转载请联系作者。
评论