python中reduce函数概念(Python高级第四天高阶函数map)
python中reduce函数概念(Python高级第四天高阶函数map)fifilter函数依次按照顺序从列表list_a中提取两个元素作为参数,进入fun_b中进行运算,得到的结果,作为下次运算时的其中一个参数,再从列表中取出一个元素,再进行运算。最终得到的结果是总和的计算。reduce函数我们来看一下map函数的参数与返回值,注意使用reduce函数时需要先导入,reduce函数是在 functools模块里面的。代码演示:
map函数
来看一下map函数的参数与返回值。
代码演示:
map() 传入的第一个参数是 fun_a ,即函数对象本身。由于结果 list_a 是一个 Iterator , Iterator 是惰性序列,因此通过 list() 函数让它把整个序列都计算出来并返回一个list。很多情况下,也可以使用for循环也可以解决问题,但实际上map作为高级函数,将运算抽象化,还可计算复杂的函数,例如将列表的元素int类型转换为int类型,只需要一行代码。
reduce函数
我们来看一下map函数的参数与返回值,注意使用reduce函数时需要先导入,reduce函数是在 functools模块里面的。
代码演示:
依次按照顺序从列表list_a中提取两个元素作为参数,进入fun_b中进行运算,得到的结果,作为下次运算时的其中一个参数,再从列表中取出一个元素,再进行运算。最终得到的结果是总和的计算。
fifilter函数
Python内建的 filter() 函数用于过滤序列,和 map() 类似, filter() 也接收一个函数和一个序列但是不同的是 filter() 把传入的函数依次作用于每个元素,然后根据返回值是 True 还是 False 决定元素的保留与丢弃。看一下fifilter的参数。
代码演示:
这里定义了一个函数not_odd 顾名思义,不是奇数的函数,这个函数,只有当参数为2的整数倍时返回True,这里fifilter函数的两个参数第一个是过滤方法,第二个是需要过滤的列表,将列表里面的元素依次带入函数中进行运算,得到的结果如果为True时,将此结果作为新的fifilter对象保留,等待函数里面的列表执行完成后,返回最终的值,这里的值为列表,也就是过滤掉了False的数据或元素。那可以用fifilter来计算素数,计算素数的其中一个方法是埃氏筛法。给出要筛数值的范围n,找出以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去......
用Python来实现这个算法,我们先写一个生成器构造一个从3开始的无限奇数序列,首先偶数列先排除。
写一个筛选的函数,这里使用了匿名函数,这个函数是返回一个判断,判断是否为可整除数。
使用fifilter来过滤,不断返回素数的生成迭代。
一个基本的判断素数方法就产生了,这里我们需要手动结束一下。
好的我们来解释一下代码,看到我们这里用到了几个知识点:
生成器与迭代器、匿名函数、fifilter函数,其中
第一段代码生成了以3开始的奇数序列
第二段代码自定义过滤函数,包含匿名函数,判断值的取余是否能被整除
第三段代码用来返回素数,这里先返回一个2为素数,因为偶数都被排除了所以整除3为基础进行排除,将数据不断地迭代生成,留下对应的素数序列。
那这里就对应的fifilter函数就是用来过滤的方法进行返回数据。
点赞加关注加转发是您给我更新的动力,如需今日相关资料或者问题可私信“资料”,特别提醒本人不是培训机构,只是爱好,自学多年分享经验,谢谢。