分享

Python高级第四天(高阶函数map、reduce、filter)

 excel05 2022-06-10 发布于福建

map函数

来看一下map函数的参数与返回值。

文章图片1

代码演示:

文章图片2

map() 传入的第一个参数是 fun_a ,即函数对象本身。由于结果 list_a 是一个 Iterator , Iterator 是惰性序列,因此通过 list() 函数让它把整个序列都计算出来并返回一个list。很多情况下,也可以使用for循环也可以解决问题,但实际上map作为高级函数,将运算抽象化,还可计算复杂的函数,例如将列表的元素int类型转换为int类型,只需要一行代码。

文章图片3

reduce函数

我们来看一下map函数的参数与返回值,注意使用reduce函数时需要先导入,reduce函数是在 functools模块里面的。

文章图片4

代码演示:

文章图片5

依次按照顺序从列表list_a中提取两个元素作为参数,进入fun_b中进行运算,得到的结果,作为下次运算时的其中一个参数,再从列表中取出一个元素,再进行运算。最终得到的结果是总和的计算。

fifilter函数

Python内建的 filter() 函数用于过滤序列,和 map() 类似, filter() 也接收一个函数和一个序列但是不同的是 filter() 把传入的函数依次作用于每个元素,然后根据返回值是 True 还是 False 决定元素的保留与丢弃。看一下fifilter的参数。

文章图片6
文章图片7

代码演示:

文章图片8

这里定义了一个函数not_odd,顾名思义,不是奇数的函数,这个函数,只有当参数为2的整数倍时返回True,这里fifilter函数的两个参数第一个是过滤方法,第二个是需要过滤的列表,将列表里面的元素依次带入函数中进行运算,得到的结果如果为True时,将此结果作为新的fifilter对象保留,等待函数里面的列表执行完成后,返回最终的值,这里的值为列表,也就是过滤掉了False的数据或元素。那可以用fifilter来计算素数,计算素数的其中一个方法是埃氏筛法。给出要筛数值的范围n,找出以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去......

用Python来实现这个算法,我们先写一个生成器构造一个从3开始的无限奇数序列,首先偶数列先排除。

文章图片9

写一个筛选的函数,这里使用了匿名函数,这个函数是返回一个判断,判断是否为可整除数。

文章图片10

使用fifilter来过滤,不断返回素数的生成迭代。

文章图片11

一个基本的判断素数方法就产生了,这里我们需要手动结束一下。

文章图片12

好的我们来解释一下代码,看到我们这里用到了几个知识点:

生成器与迭代器、匿名函数、fifilter函数,其中

第一段代码生成了以3开始的奇数序列

第二段代码自定义过滤函数,包含匿名函数,判断值的取余是否能被整除

第三段代码用来返回素数,这里先返回一个2为素数,因为偶数都被排除了所以整除3为基础进行排除,将数据不断地迭代生成,留下对应的素数序列。

那这里就对应的fifilter函数就是用来过滤的方法进行返回数据。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多