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

Python初学者 专栏收录该内容
58 篇文章 7 订阅


在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
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页

打赏作者

Chung丶无际鹰

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值