【1.32】几个函数总结-map-filter-reduce

处理用map 函数   对序列的元素变化和处理,不改变序列元素的位置

筛选用的 filter  函数

压缩使用的 reduce 函数

 

map

功能: 求一个序列或者多个序列进行函数映射之后的值,就该想到map这个函数,

它是python自带的函数,在python3.*之后返回的是迭代器,同filter,需要进行列表转换


调用: map(function,iterable1,iterable2),function中的参数值不一定是一个x,也可以是x和y,甚至多个;

后面的iterable表示需要参与function运算中的参数值,

有几个参数值就传入几个iterable

x = [1,2,3,4,5]
y = [2,3,4,5,6]
list(map(lambda x,y:(x*y)+2,x,y))
# 输出:
[4, 8, 14, 22, 32]

 

filter

功能: filter的功能是过滤掉序列中不符合函数条件的元素,

当序列中要删减的元素可以用某些函数描述时,就应该想起filter函数。


调用: filter(function,sequence),function可以是匿名函数或者自定义函数,

它会对后面的sequence序列的每个元素判定是否符合函数条件,返回TRUE或者FALSE,

从而只留下TRUE的元素;

sequence可以是列表、元组或者字符串

x = [1,2,3,4,5]
list(filter(lambda x:x%2==0,x))
# 找出偶数。python3.*之后filter函数返回的不再是列表而是迭代器,所以需要用list转换。 # 输出: [2, 4]

 

reduce

功能: 对一个序列进行压缩运算,得到一个值。但是reduce在python2的时候是内置函数

到了python3移到了functools模块,所以使用之前需要 from functools import reduce


调用: reduce(function,iterable),其中function必须传入两个参数,iterable可以是列表或者元组

from functools import reduce
y = [2,3,4,5,6]
reduce(lambda x,y: x + y,y) # 直接返回一个值

其计算原理:
先计算头两个元素:f(2, 3),结果为5;
再把结果和第3个元素计算:f(5, 4),结果为9;
再把结果和第4个元素计算:f(9, 5),结果为14;
再把结果和第5个元素计算:f(14, 6),结果为20;
由于没有更多的元素了,计算结束,返回结果20。

 

posted @ 2016-03-20 17:59  科学小怪癖  阅读(104)  评论(0)    收藏  举报