python的filter函数的使用方法详解以及使用案例,是否以什么结尾,是否大于什么(判断是True,则留下来)

1、总共有3个人看电影,有2个人看电影经常说话,我们把他们两个过滤出去

move_people=["gouguoqi","beiye_sb","xiudiannao_sb"]
ret=[]
for n in move_people:
    if n.endswith("sb"):
        pass
    else:
        ret.append(n)
print (ret)

C:\python35\python3.exe D:/pyproject/day14函数/filter函数.py

['gouguoqi']

2、写成函数应该怎么写

move_people=["gouguoqi","beiye_sb","xiudiannao_sb"]#1.定义3个看电影的人
def del_sb(people):#2.定义一个函数,到20行,放入内存中,等待被调用
    ret = []#3.1定义一个空列表
    for n in people:#3.2循环这3个看电影的人
        if n.endswith("sb"):#判断如果是sb结尾的就什么都不干
            pass
        else:#如果结尾不是sb的就把名字追加到空列表ret里面
            ret.append(n)
    return ret#最后函数返回值是ret 也就是一个列表
print(del_sb(move_people))#3.调用del_sb这个函数,把列表作为参数传给people

C:\python35\python3.exe D:/pyproject/day14函数/filter函数.py

['gouguoqi']

3、改成功能性的函数

move_people=["gouguoqi","beiye_sb","xiudiannao_sb"]#1.定义3个看电影的人
def del_end_sb(x):
    return x.endswith("sb")
def del_sb(func,people):#2.定义一个函数,到20行,放入内存中,等待被调用
    ret = []#3.1定义一个空列表
    for n in people:#3.2循环这3个看电影的人
        if func(n):#判断如果是sb结尾的就什么都不干
            pass
        else:#如果结尾不是sb的就把名字追加到空列表ret里面
            ret.append(n)
    return ret#最后函数返回值是ret 也就是一个列表
print(del_sb(del_end_sb,move_people))#3.调用del_sb这个函数,把列表作为参数传给people

C:\python35\python3.exe D:/pyproject/day14函数/filter函数.py

['gouguoqi']

4、终极版本就是下面这样了

lambda x:x.endswith("sb")        这个替换了下面这个自定义函数

def del_end_sb(x):
    return x.endswith("sb")

move_people=["gouguoqi","beiye_sb","xiudiannao_sb"]#1.定义3个看电影的人
def del_sb(func,people):#2.定义一个函数,到20行,放入内存中,等待被调用
    ret = []#3.1定义一个空列表
    for n in people:#3.2循环这3个看电影的人
        if func(n):#判断如果是sb结尾的就什么都不干
            pass
        else:#如果结尾不是sb的就把名字追加到空列表ret里面
            ret.append(n)
    return ret#最后函数返回值是ret 也就是一个列表
print(del_sb(lambda x:x.endswith("sb"),move_people))

C:\python35\python3.exe D:/pyproject/day14函数/filter函数.py

['gouguoqi']

5、filter    取出sb结尾的

move_people=["gouguoqi","beiye_sb","xiudiannao_sb"]
print (list(filter(lambda x:x.endswith("sb"),move_people)))

C:\python35\python3.exe D:/pyproject/day14函数/filter函数.py

['beiye_sb', 'xiudiannao_sb']

取出不是sb结尾的

move_people=["gouguoqi","beiye_sb","xiudiannao_sb"]
print (list(filter(lambda x:not x.endswith("sb"),move_people)))

C:\python35\python3.exe D:/pyproject/day14函数/filter函数.py

['gouguoqi']

filter的语法跟map的语法是一样的,2个参数

filter(一个处理方法,可迭代对象)

6、filter遍历序列中的每个元素,判断每个元素得到布尔值,如果True则留下来

name=[
    {
        "name":"beiye","age":9000,
        "name":"maioye","age":8000,
        "name":"xiudiannao","age":7000,
        "name":"gouguoqi","age":18
    }
]
print (list(filter(lambda x:x["age"]<=18,name)))

C:\python35\python3.exe D:/pyproject/day14函数/filter函数.py

[{'name': 'gouguoqi', 'age': 18}]

那name这个列表里面的每个元素以for循环的方式作为参数传递给x,冒号后面是处理方法

posted @ 2018-06-08 00:58  gouguoqi  阅读(1003)  评论(0编辑  收藏  举报