Python中的 lambda,filter,map,zip,reduce,apply(学习笔记)

时间:2022-02-10 20:25:17

1、lambda(创建匿名函数)

lambda只是一个表达式,函数体比def简单很多,很多时候定义def,然后写一个函数太麻烦,这时候就可以用lambda定义一个匿名函数。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。

f = lambda a,b: a if a>b else b
print(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]

 

Python中的 lambda,filter,map,zip,reduce,apply(学习笔记)Python中的 lambda,filter,map,zip,reduce,apply(学习笔记)
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
<zip object at 0x103abc288>
>>> 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 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。

6、apply

功能: 是pandas中的函数,应用对象为pandas中的DataFrame或者Series。大致有两个方面的功能:一是直接对DataFrame或者Series应用函数,二是对pandas中的groupby之后的聚合对象apply函数
调用: apply(function,axis),function表明所使用的函数,axis表明对行或者列做运算
例子:

import numpy as np
a = np.random.randint(low=0,high=4,size=(2,4))
data = pd.DataFrame(a)
data.apply(lambda x:x*10)
# 输出:

Python中的 lambda,filter,map,zip,reduce,apply(学习笔记)
总结
1、filter和map都是python内置的函数,可以直接调用,reduce在functools模块,apply在pandas模块
2、要过滤删减序列用filter;要对多个序列做函数运算用map;在pandas里面直接调用apply,尤其是聚合对象,当然还有agg,日后补充。reduce用得少。