python 内置函数filter

280次阅读  |  发布于5年以前

python 内置函数filter


    class filter(object):
     """
     filter(function or None, iterable) --> filter object

     Return an iterator yielding those items of iterable for which function(item)
     is true. If function is None, return the items that are true.
     """

filter(func,iterator)

func:自定义或匿名函数中所得值是布尔值,true将保留函数所取到的值,false则取反。  
iterator:可迭代对象。

例:

 过滤列表['text_test_text', 'test_text_1', 'text_test_2', '3_test_text', 'test_test']  
 只要含有text字符串及将其取出 or 取反。  

s.rfind'text'+1

 Python3中 rfind() 返回字符串最后一次出现的位置,如果没有匹配项则返回-1。  
 数字中0是false,0以上的整数都是true,所以s.rfind'text'后会有+1,没找到字符及-1+1=0.

# Filter


    li = ['text_test_text', 'test_text_1', 'text_test_2', '3_test_text', 'test_test']

    # 默认保留函数所取到的值
    print(list(filter(lambda s: s.rfind('text') + 1, li)))
    # 取反,下三个例子是一样的
    print(list(filter(lambda s: not s.rfind('text') + 1, li)))

# Noe 自定义函数


    l1 = ['text_test_text', 'test_text_1', 'text_test_2', '3_test_text', 'test_test']


    def distinguish(l):
     nl = []
     for s in l:
      if s.rfind("text") + 1:
       nl.append(s)
     return nl


    print(distinguish(l1))

# Two 自定义高阶函数


    l2 = ['text_test_text', 'test_text_1', 'text_test_2', '3_test_text', 'test_test']


    def f(s):
     return s.rfind('text') + 1


    def distinguish(func, array):
     nl = []
     for s in array:
      if func(s):
       nl.append(s)
     return nl


    print(distinguish(f, l2))

# Three 匿名函数


    l3 = ['text_test_text', 'test_text_1', 'text_test_2', '3_test_text', 'test_test']


    def distinguish(func, array):
     nl = []
     for s in array:
      if func(s):
       nl.append(s)
     return nl

    print(distinguish(lambda s: s.rfind('text') + 1, l3))

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8