python中的内置函数lambda map filter reduce
参考:https://www.cnblogs.com/caizhao/p/7905094.html
1.lambda表达式
lambda的功能类似于定义一个匿名函数,它简化了函数定义的书写方式,使代码更简洁
基本格式:lambda 参数,参数...:函数功能代码
举栗:
g=lambda x:x+1,在该表达式中x为入口参数,x+1为函数体,其用函数来表示为:
def f(x):
return x+1
g(1)=2,g(2)=3,g(1)也可表达为lambda x:x+1(1)
两个入参的栗子:
#方式1.声明一个简单的lambda表达式
mylamb = lambda x,y:x+y
#调用函数
result = mylamb(4,5)
扩展:
练习条件运算时,对于简单的if else语句,可以使用三元运算来表示,即:
if 1==1: name='qpy' else: name='wjx'
用三元运算的方式表达:
name='qpy' if 1==1 else 'wjx'
对于简单的函数,也存在一种简单的表达方式,或者说lambda存在意义就是对简单函数的简洁表达,栗子可参考最初的举栗。
其他栗子:
aa=[{'id':4,'name':'a'},{'id':1,'name':'b'},{'id':7,'name':'c'}],想要将aa按照字典中的id来排序,可以使用
sorted(aa, key=lambda x:x['id'])
2.map
map的功能是遍历序列,对序列中每个元素进行操作,最终获取新的序列,整个过程如下:
在python 3.0中,使用map的返回值是一个对象,可以使用for...in获取对象中的值,python2中返回的是一个list
map函数的参数有两个,map(f,list),f是一个函数,list是待操作的序列。其中,函数f的入参个数与list的个数一致。
举栗1:函数f的入参以及list只有一个
foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
map(lambda x: x * 2 + 10, foo) 输出为[14, 46, 28, 54, 44, 58, 26, 34, 64]
该例子可用for in语句来表示,即print [x * 2 + 10 for x in foo]
举栗2:函数f的入参以及list有两个
li = [11, 22, 33]
sl = [1, 2, 3]
map(lambda a, b: a + b, li, sl) 输出为[12, 24, 36]
举栗3:自定义函数f
def f(x):
return x * 2 + 10
li = [11, 22, 33]
map(f,li) 输出为[32, 54, 76]
3.filter
filter,它是对序列中的元素进行筛选,最终获取符合条件的序列
在python 3.0中,使用filter的返回值是一个对象,可以使用for...in获取对象中的值,python2中返回的是一个list
举栗1:
foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
filter(lambda x: x % 3 == 0, foo) 输出为[18, 9, 24, 12, 27]
该例子可用for in语句来表示,即print [x for x in foo if x % 3 == 0]
举栗2:
li = [11, 22, 33]
new_list = filter(lambda arg: arg > 22, li)
该例子可用for in语句来表示,即print[i for i in li if i >22]
4.reduce
reduce对于序列内所有元素进行累计操作
在python 3.0后, reduce已经不在built-in function里了, 要用它就得from functools import reduce
reduce函数的参数有3个,reduce(f,list,init_val),f是一个函数,list是要循环的序列,init_val是初始值(可选)。其中,函数f的入参必须有两个,list只有一个,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
举栗1:
li = [11, 22, 33]
result = reduce(lambda arg1, arg2: arg1 + arg2, li) 输出结果为:66
result = reduce(lambda arg1, arg2: arg1 + arg2, li,100) 输出结果为:166