描述

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

语法

以下是 filter() 方法的语法:

filter(function, iterable)

参数

  • function -- 判断函数。
  • iterable -- 可迭代对象。

返回值

返回列表。

先给一个需求大家想一下怎么写?

过滤到s开头的人

movie_people=['s_lal','wupeiqi','s_wu','s_al']
#可能你最先想到的是用for循环处理这个问题
movie_people=['s_lal','wupeiqi','s_wu','s_al']
# ret=[]
# for p in movie_people:
#     if not p.startswith('s'):
#         ret.append(p)
# print ret

 转换成函数的写法:

#特定的功能放到函数当中
def filter_test(array):
    ret=[]
    for p in array:
        if not p.startswith('s'):
            ret.append(p)
    return ret
res = filter_test(movie_people)
print res

 然后问题又来了,上面方法不够精简,又想到了下面的方法

def s_show(n):
    return n.startswith('s')
def filter_test(func,array):
    ret=[]
    for p in array:
        if not func(p):
            ret.append(p)
    return ret
res = filter_test(s_show,movie_people)
print res

 还是不够精简,学过匿名函数之后,完全可以用匿名函数代替


def filter_test(func,array):
    ret=[]
    for p in array:
        if not func(p):
            ret.append(p)
    return ret
res = filter_test(lambda x: not x.startswith('s'),movie_people)
print list(res)

 用filter函数写

movie_people=['s_lal','wupeiqi','s_wu','s_al']
res2 = filter(lambda x:not x.startswith('s'),movie_people)
print list(res2)

 

:

 
 
posted on 2018-04-25 16:56  wy0925  阅读(157)  评论(0编辑  收藏  举报