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

posted @ 2019-12-11 13:58  声声慢43  阅读(209)  评论(0编辑  收藏  举报