python2 filter() map() reduce()函数基础

来源:互联网 发布:淘宝正品潮牌店铺 编辑:程序博客网 时间:2024/05/18 02:05

在上一篇博客(python lambda函数基础,网址:http://blog.csdn.net/sxingming/article/details/51296284 )中,我们学习了lambda函数的使用。

本文,在使用lambda函数的基础上,我们学习在python2中,filter( )   map( )   reduce( )三个函数的使用。

1》filter( )函数

filter( )函数会对指定序列执行过滤操作。定义如下:
filter(boolFunction,sequence):此函数的功能相当于过滤器。调用一个布尔函数boolFunction来迭代遍历每个sequence中的元素;返回一个能够使boolFunction函数返回值为true的元素的序列。
例子:
>>> filter(lambda x:x%2==1,[1,2,3,4,5,6])
[1, 3, 5]
>>> filter(lambda x:x>10,[2,4,6,7,8,10,11,14,18])
[11, 14, 18]

2》map( )函数

map( )函数会根据提供的函数对指定序列做映射。map函数定义如下:
map(function,sequence1[,sequence2...])
例子:
>>> map(lambda x:None,[1,2,3,4])
[None, None, None, None]
>>> map(lambda x:x*2,[1,2,3,4])
[2, 4, 6, 8]
>>> map(lambda x:x*2,[1,2,3,[4,5,6]])
[2, 4, 6, [4, 5, 6, 4, 5, 6]]
参数存在多个序列时,会依次以每个序列中相同位置的元素做参数调用function函数。要注意function函数的参数数量,要和map中提供的集合数量相匹配。比如:
>>> map(lambda x,y:x+y,[1,2,3,4,5,6],[4,5,6,7,8,9])
[5, 7, 9, 11, 13, 15]
map返回的list中第一个元素为,参数序列1的第一个元素加参数序列2中的第一个元素(1 + 4),
list中的第二个元素为,参数序列1中的第二个元素加参数序列2中的第二个元素(2+ 5),
依次类推,最后的返回结果为:
[5, 7, 9, 11, 13, 15]
>>> map(lambda x,y:(x,y),[1,2,3,4],[1,2,3,4])
[(1, 1), (2, 2), (3, 3), (4, 4)]
当函数为None时,返回由元组构成的列表,效果等同于上一条,如下:
>>> map(None, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]

3》reduce( )函数

reduce( )函数会对参数序列中元素进行迭代操作。定义如下:
reduce(function,sequence[,init]):function为二元函数,将function作用于sequence序列的元素,每次携带一对(先前的结果以及序列中下一个元素),连续的将现有的结果和序列中下一个值代入function函数中,最后得到一个单一的返回值。

如果初始值init给定,则第一次操作取init的值和序列中第一个元素。如果init没有给定,则第一次操作取序列中的前2个元素

例子:
>>> reduce(lambda x,y:x+y,[1,2,3,4,5]) # init没有给定初始值
15
>>> reduce(lambda x,y:x+y,[1,2,3,4,5],10) # init给定初始值
25

(完)

1 0