描述
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)
: