暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

让我们用filter函数回答“鱼香肉丝里面有没有鱼呢?”

云南高校数据化运营管理工程中心 2018-06-18
239

让我们用filter函数回答

“鱼香肉丝里面有没有鱼呢?”

作者:水...琥珀

编辑:楠楠


引言:


在之前的文章中提到lambda、map函数,今天学习一下与map有“异曲同工”之妙的filter函数。并说明Python2和Python3中这个函数的不同之处。


函数内容:


filter(function or None, sequence),

其中sequence 可以是list ,tuple,string。filter()函数,是用来过滤sequence的,对序列参数 sequence 中的每个元素调用 function 函数,对function结果为false的剔除,最后返回调用结果为True的元素。


Python3代码:


代码块1:

# -*- coding: utf-8 -*-

def IfEven(x):  #此函数判读是否是偶数

    if x%2 == 0:

        return True

    else:

        return False

mylist=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

resultOne= filter(IfEven,mylist)

# 3.x 返回的是对象 filter object

print(list(resultOne))   

# 3.x 须做类型转换 [0, 2, 8, 34]


结果为,成功将list中的奇数筛去。同时,我们也可以用学过的lambda函数实现相同的功能。哈哈,来再次见证lambda对于简单函数的短小精悍。


代码块2:


mylist =[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

resultTwo= filter(lambda x:x%2 == 0,mylist)

print(list(resultTwo))   

#结果为[0, 2, 8, 34] 


通过代码块2这个例子我们已经认识了filter函数,同时我们也要明白True 或者False也可以通过判断function的结果来产生呦。


代码块3:(鱼香肉丝) 


Jieba是一个中文分词模块。我们用jieba的全模式,分割“鱼香肉丝有没有鱼呢?”这句话,中国人都知道老婆饼里没有老婆,鱼香肉丝里面也没有鱼,那我们就用filter函数实事求是地,正大光明地将切割结果中“鱼”筛去。


# -*- coding: utf-8 -*-

import jieba

resultThree= jieba.cut('鱼香肉丝里有没有鱼呢',cut_all = True)

# cut_all = True全模式,得到一个迭代器

print (','.join(jieba.cut('鱼香肉丝里有没有鱼呢',cut_all = True)))

# 结果为: 鱼香肉丝,香肉,肉丝,里,有没有,没有,鱼,呢

list(filter(lambda x:x!='鱼',box2))

#结果为: ['鱼香肉丝', '香肉', '肉丝', '里', '有没有', '没有', '呢'] 


嘿嘿,成功拿走了鱼。

 

filter函数深度说明:  


filter只能接受两个参数(function,sequence) ,其中函数function中只能返回一个值。

3.x 返回的是一个filter object (迭代器) (同函数map),要加上list()等类型转换;而2.x 版本的返回值类型和参数sequence的类型相同。


思考:为什么说filter和 map “同工异曲”呢?


太好啦,在代码中我们复习了lambda匿名函数,现在让我们趁机复习一下棒棒的map(function or None, sequence)。


“同工”是从他们作用的方式,两个函数都对指定序列的每个元素进行操作,过程为将序列的每个元素作用在指定的function。


“异曲”呢,是因为他们的返回结果不同: filter最后返回的结果包含调用结果为True的元素;map返回的结果为元素调用function函数的返回值。再次提醒,Python3返回对应结果的迭代器,打印须做类型转换。



结束语:


Python 内置了一些比较特殊且实用的函数,使用这些能使你的代码简洁而易读。非常重要的lambda、map和filter,都已经介绍啦,你get到了吗?在留言区或者打卡群提问呦。在作者之后的文章中会讲述python的一些有趣的好玩的模快以及面试题,敬请期待。


最后祝大家端午节快乐啦~~

端 午 安 康

欢迎热爱数据挖掘的你加入我们的编辑团队,有兴趣后台私聊小编哦,坐等调戏~~~

长按识别二维码关注我们

文章转载自云南高校数据化运营管理工程中心,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论