Python的sum、map、filter和reduce

最近在看《Think Python》(英文版),看到了讲解map, reduce, filter等函数,觉得讲解的思路特别好。所以,我加上了自己的理解,写了本篇文章。

引子

如果要对列表中的数字求和,我们可以这样做:

def add_all(t):
    """t is a list of nums"""
    total = 0
    for x in t:
        total += x

    return total

运行结果:


运行结果

由于python中求和操作太常见了,所以python提供了内置函数sum来进行这项操作

sum

将上一版代码修改如下:

if __name__ == '__main__':
    t = [1, 2, 3, 4]
    print sum(t)

运行结果:


运行结果

像这种从一个列表中得出一个结果的操作,也叫reduce,除了求和这一种reduce操作外,python还支持自定义的方式

reduce

比如,我不是想对队列求和,而是想得到列表各数字的乘积,可以利用reduce这样实现:

def multiple_all(x, y):
    return x * y

if __name__ == '__main__':
    t = [1, 2, 3, 4]
    print reduce(multiple_all, t)

运行结果:


运行结果

上面介绍了将一个从一个列表得到一个结果的情形,还有一种情形是:按照某个规律对列表中的元素一一转换,这就要用到map内置函数了

map

如果给定一个列表(元素为字符串),要把列表元素首字母大写,可以这样做

if __name__ == '__main__':
    t = ['hello', 'world', 'yarving']
    print map(lambda x: x.capitalize(), t)

运行结果:


运行结果

还有一种情况,是要将列表里的元素过滤出去,可以用到filter函数

filter

给定一个列表(元素为数字),如果要仅保留不大于4的数字,可以这样做:

if __name__ == '__main__':
    t = [1, 2, 3, 4, 5, 6, 7]
    print filter(lambda x: x <= 4, t)

运行结果:


运行结果

获取《Think Python》(英文版)电子书

如想要获取《Think Python》(英文书)的PDF版本,可发送邮件到 yarving@qq.com ,并标明主题 "Think Python" 。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

  • python 最近学习零基础入门深度学习系列帖子时,遇到了Python代码,就这个帖子代码中值得学习的内容,做一个...
    小双2510阅读 3,342评论 0 0
  • 要点: 函数式编程:注意不是“函数编程”,多了一个“式” 模块:如何使用模块 面向对象编程:面向对象的概念、属性、...
    victorsungo阅读 5,547评论 0 6
  • Python进阶框架 希望大家喜欢,点赞哦首先感谢廖雪峰老师对于该课程的讲解 一、函数式编程 1.1 函数式编程简...
    Gaolex阅读 11,049评论 6 53
  • 生活,究竟是什么?以前的我经常会问自己,为了何生活,为了何努力,为了何奋斗,但是随着成长工作的忙碌,自己也逐...
    M小进阅读 2,750评论 0 0
  • 大梦初醒,竟垂垂老矣。 想不起名字,记不得爱人,亦不知身在何方。 拂去灰尘,得琴一把,轻启朽指,如痴如醉。 一曲毕...
    拓柏阅读 1,715评论 0 1

友情链接更多精彩内容