1、lambda(创建匿名函数)
lambda只是一个表达式,函数体比def简单很多,很多时候定义def,然后写一个函数太麻烦,这时候就可以用lambda定义一个匿名函数。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。
f = lambda a,b: a if a>b elsebprint(f(6, 8))
2、filter(function, iterable)
filter(function, iterable):简单的理解为过滤器,需要两个参数,function,和一个可迭代对象(字符串、列表、元组),过滤器会依次将序列的值传入function中,
如果返回True的话,将其重新生成一个列表返回。
#Python 2.x 返回列表,Python 3.x 返回迭代器
1 list(filter(lambda x:True if x % 3 == 0 else False, range(50)))#在Python 2.x中,无需list()即可返回列表2 [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48]
3、map(function, iterable, ...)
map():映射,用法和filter()类似,也是将序列放入函数进行运算,但是,不论运算结果为什么,map()都将忠实反馈,这是map()和filter()的主要区别。请注意,filter()和map()中的function都必要有一个返回值。
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]
1 >>> list(map(lambda x:True if x % 3 == 0 else False, range(100)))2 [True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True]
View Code
4、zip([iterable,...])
参数:iterabl -- 一个或多个迭代器; 返回值:返回一个对象 #Python 2.x 返回列表,Python 3.x 返回可迭代对象
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
我们可以使用 list() 转换来输出列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
>>>a = [1,2,3]>>> b = [4,5,6]>>> c = [4,5,6,7,8]>>> zipped = zip(a,b) #返回一个对象
>>>zipped
>>> list(zipped) #list() 转换为列表
[(1, 4), (2, 5), (3, 6)]>>> list(zip(a,c)) #元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]>>> a1, a2 = zip(*zip(a,b)) #与 zip 相反,zip(*) 可理解为解压,返回二维矩阵式
>>>list(a1)
[1, 2, 3]>>>list(a2)
[4, 5, 6]>>>
5、reduce
功能: 对一个序列进行压缩运算,得到一个值。但是reduce在python2的时候是内置函数,到了python3移到了functools模块,所以使用之前需要 from functools import reduce
调用: reduce(function,iterable),其中function必须传入两个参数,iterable可以是列表或者元组
from functools importreduce
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。
6、apply
功能: 是pandas中的函数,应用对象为pandas中的DataFrame或者Series。大致有两个方面的功能:一是直接对DataFrame或者Series应用函数,二是对pandas中的groupby之后的聚合对象apply函数
调用: apply(function,axis),function表明所使用的函数,axis表明对行或者列做运算
例子:
importnumpy as np
a= np.random.randint(low=0,high=4,size=(2,4))
data=pd.DataFrame(a)
data.apply(lambda x:x*10)#输出:
总结
1、filter和map都是python内置的函数,可以直接调用,reduce在functools模块,apply在pandas模块
2、要过滤删减序列用filter;要对多个序列做函数运算用map;在pandas里面直接调用apply,尤其是聚合对象,当然还有agg,日后补充。reduce用得少。