参考地址:http://www.cnblogs.com/sesshoumaru/p/6000788.html
英文文档:
filter
(function, iterable)
Construct an iterator from those elements of iterable for which function returns true. iterable may be either a sequence, a container which supports iteration, or an iterator. If function is None
, the identity function is assumed, that is, all elements of iterable that are false are removed.
Note that filter(function, iterable)
is equivalent to the generator expression (item for item in iterable if function(item))
if function is not None
and (item for item in iterable if item)
if function is None
.
See itertools.filterfalse()
for the complementary function that returns elements of iterable for which function returns false.
说明:
1. filter函数用于过滤序列。过滤的方式则是采用传入的函数,去循环序列的元素调用,如果函数计算的结果为True则保留元素,否则将舍弃该元素。
>>> a = list(range(1,10)) #定义序列 >>> a [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> def if_odd(x): #定义奇数判断函数 return x%2==1 >>> list(filter(if_odd,a)) #筛选序列中的奇数 [1, 3, 5, 7, 9]
2. 当function参数传入None时,序列中的元素值如果为False,也会自动舍弃。
>>> c = ['',False,'I',{}] #定义序列 >>> c ['', False, 'I', {}] >>> list(filter(None,c)) #筛选函数为None,自动舍弃序列中的False值,空字符串、False值、空序列都是False值,所以丢弃 ['I']
总结 : 简单的说(来自老男孩python全栈课程)
filter: 过滤,符合条件的选取,不符合条件的过滤掉
filter有两个参数, 第一个参数是一个函数, 第二个参数是一个可迭代的对象. 循环遍历第二个参数, 取出每一个,执行第一个函数,执行函数的结果返回ture,符合条件则留下,如果返回false,就是不满足条件
def f1(x): if x>20: return True else: return False r1 = filter(f1,[11,22,33,44]) for i in r1: print(i)
当函数是一个很简单的表达式时,可以使用lambda表达式
r2 = filter(lambda x : x > 22,[11,22,33,44]) for i in r2: print(i)
map和filter是类似的.
map: 对可迭代的集合中的每一个元素,传递到第一个函数中, 返回执行结果
map有一个固定参数,一个可变参数, 第一个参数是一个函数, 可变参数是可迭代的对象.
#对集合中的内一个元素都加20 def m1(x): return x+20 m = map(m1, [1, 2, 3, 4, 5]) print(list(m))
返回结果:
[21, 22, 23, 24, 25]
map的可变参数传递, 可以参考下面的内容, 转自文章http://www.cnblogs.com/sesshoumaru/p/6031819.html
英文文档:
map
(function, iterable, ...)Return an iterator that applies function to every item of iterable, yielding the results. If additional iterable arguments are passed, functionmust take that many arguments and is applied to the items from all iterables in parallel. With multiple iterables, the iterator stops when the shortest iterable is exhausted. For cases where the function inputs are already arranged into argument tuples, see itertools.starmap()
.说明: 1. 函数接受一个函数类型参数、一个或者多个可迭代对象参数,返回一个可迭代器,此迭代器中每个元素,均是函数参数实例调用可迭代对象后的结果。
>>> a = map(ord,'abcd') >>> a <map object at 0x03994E50> >>> list(a) [97, 98, 99, 100]
2. 当传入多个可迭代对象时,函数的参数必须提供足够多的参数,保证每个可迭代对象同一索引的值均能正确传入函数。
>>> a = map(ord,'abcd') >>> list(a) [97, 98, 99, 100] >>> a = map(ord,'abcd','efg') # 传入两个可迭代对象,所以传入的函数必须能接收2个参数,ord不能接收2个参数,所以报错 >>> list(a) Traceback (most recent call last): File "<pyshell#22>", line 1, in <module> list(a) TypeError: ord() takes exactly one argument (2 given) >>> def f(a,b): return a + b >>> a = map(f,'abcd','efg') # f函数可以接受2个参数 >>> list(a) ['ae', 'bf', 'cg']
3. 当传入多个可迭代对象时,且它们元素长度不一致时,生成的迭代器只到最短长度。
>>> def f(a,b): return a + b >>> a = map(f,'abcd','efg') # 选取最短长度为3 >>> list(a) ['ae', 'bf', 'cg']
4. map函数是一个典型的函数式编程例子。