基础篇_010_函数_filter()过滤器函数
filter(condition, iterable),这意思就是: 在可迭代对象中查找满足条件的元素,并将它们放置在一个迭代器中,最后返回该迭代器。
过滤器嘛,这个大家应该都懂吧,不懂也应该有点儿内感觉吧。啊,这个filter()函数就跟咱们家里那饮水机的滤芯一样,过滤掉不好的杂质,就留下纯净水,然后呢,这杂质就相当于filter()中的condition == False,而纯净水就相当于filter()中的condition == True。
----我们还是和学习map()函数一样来学习filter(),了解filter()函数的内部实现的原理 ===》
1. 现在这里有一个需求: "给你一个列表,要求将sb去掉,不然他们在电影院里面很恶心,俩谈爱的,还有一个儒雅随和臭Gray。eg: people_list = ["sb_feixue", "sb_Gary", "simba", "sb_laoguo"],输出的新列表为: movie_list = ["simba"]"。解决方法如下 ===》
# 1. 函数封装逻辑代码,提高代码的复用
people_list = ["sb_feixue", "sb_Gary", "simba", "sb_laoguo"]
def my_filter(li):
    result = []
    for person in li:
        if not person.startswith("sb"):
            result.append(person)
    return result
movie_list = my_filter(people_list)
print(movie_list)   # 输出结果:['simba']
2. 需求一如既往的改了: "列表是people_list = ["feixue_sb", "Gary_sb", "simba", "laoguo_sb"]",那样先前写的函数就作废了,需要重新再改一下,那如果说这需求又双叒叕变了呢?一样的,根据"函数即变量"这个"风湿理论",我们可以传入一个函数参数 ===》
# 2. "函数即变量"
people_list = ["feixue_sb", "Gary_sb", "simba", "laoguo_sb"]
def my_startswith(item):
    return not item.endswith("sb")
def my_filter(condition, li):
    result = []
    for person in li:
        if condition(person):
            result.append(person)
    return result
movie_list = my_filter(my_startswith, people_list)
print(movie_list)   # 输出结果:['simba']
----filter(condition, iterable)函数 ===》
我猜大家都知道了filter()函数怎么用了,毕竟上面用的例子都是my_filter()。没错,我们又在不知不觉中完成了一个很牛批的函数。现在我们来试验一下这个filter()函数,为了突出灵活性我们用lambda匿名函数 ===》
# 3. 内置函数: filter()
people_list = ["feixue_sb", "Gary_sb", "simba", "laoguo_sb"]
result  = filter(lambda name:not name.endswith("sb"), people_list)
movie_list = list(result)
print(result)       # 输出:<filter object at 0x000001530EE32208>
print(movie_list)   # 输出:['simba']
这里的"<filter object at 0x000001530EE32208>"和map()中的"<map object at 0x0000025D645500B8>"一样,都是表示迭代器。
                    
                
                
            
        
浙公网安备 33010602011771号