初学者python笔记(filter()函数完全详解)


在Python中总有些奇奇怪怪的函数,filter就是一个,但是它特别强大和实用,了解它本质才能更好得使用它。本篇文章会从最基础的函数嵌套开始分析,都是 filter 函数执行的原理,到最后就知道 filter 函数的妙处了
这里还要用到两个库函数:
startswith(): 判断某字符串是否以参数中的字符串开头
endswith() : 判断某字符串是否以参数中的字符串结尾
二者的返回值都是布尔值:True或False

初级版本——普通函数:

movie_people = ['sb绿巨人','美国队长', 'sb钢铁侠', '蜘蛛侠sb']
def filter_test(array):  #接收列表的形参array
    ret = []
    for i in array:
        if not i.startswith('sb'):  #判断是否以'sb'开头,如果不是sb开头,返回值为False,有一个not,则可以执行追加语句
            ret.append(i)   #追加到ret列表中
    return ret  #python中可以返回列表
print(filter_test(movie_people))  #返回值是ret列表,所以这里也是输出ret列表

结果是:
[‘美国队长’, ‘蜘蛛侠sb’]
因为只有这两个不是以sb开头的

改进版本——函数嵌套:

movie_people = ['sb绿巨人','美国队长', 'sb钢铁侠', '蜘蛛侠sb']
def sb_till(n):
    return n.endswith('sb')  #判断是否以'sb'结尾,若是,则返回True

def filter_test(func,array):
    ret = []
    for i in array:
        if not func(i):  #如果是以sb结尾,返回的布尔值为False,则添加到ret列表中
            ret.append(i)
    return ret  #python中可以返回列表
res = filter_test(sb_till,movie_people)
#这里filter_test函数传入的形参是sb_till函数和movie_people列表
print(res)

结果是:
[‘sb绿巨人’, ‘美国队长’, ‘sb钢铁侠’]
这几个显然都不是以sb结尾的字符串

高级版本——匿名函数:

movie_people = ['sb绿巨人','美国队长', 'sb钢铁侠', '蜘蛛侠sb']
def filter_test(func,array):
    ret = []
    for i in array:
        if not func(i):
            ret.append(i)
    return ret
res = filter_test(lambda n:n.endswith('sb'),movie_people)
#如果n是以sb结尾的话,返回值是True,前面加一个not,则不会保留下来,也不会输出
print(res)

结果是:
[‘sb绿巨人’, ‘美国队长’, ‘sb钢铁侠’]
这里用到了匿名函数的调用,lambda,这样定义的函数可以直接用,冒号前面的n是需要处理的对象,冒号后的n是对n的处理。

终极版本——filter函数:

上面三个版本,实现的功能差不多都是一样的,每个版本都是那么多行的代码,而且逻辑还不简单,如果理解了也可以更好记住 filter 函数。
下面,就是 filter 函数上场了表演了,只需要短短两行就可以实现上面十几行代码所能实现的功能。

movie_people = ['sb绿巨人','美国队长', 'sb钢铁侠', '蜘蛛侠sb']
res = list(filter(lambda n:not n.endswith('sb'),movie_people))
print(res)

Ps:
#遍历第二个参数里面的元素,如果第一个参数是True就保留该元素,
#filter返回的是元素的内存地址,若要输出出该元素,
#需要将返回值list列表化一下,或者tuple元组化

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿蒙Next

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值