Python lambda表达式filter、map、reduce函数用法解析
前言
lambda是表达式,用于创建匿名函数,可以和filter、map、reduce配合使用。
本文环境Python3.7。
一、lambda表达式
lambda只包含一个语句,用于创建匿名函数。
语法:
lambda[arg1[,arg2,.....argn]]:expression
arg1--参数,可以有多个
expression--表达式
使用例子:
f1=lambdax:x>10 print(f1(1))#输出:False print(f1(11))#输出:True f2=lambdax,y:x+y print(f2(1,2))#输出:3
二、filter()函数
filter()函数用于过滤序列,过滤掉不符合条件的元素,返回迭代器对象(Python2是列表),可以使用list()转换为列表。
语法:
filter(function,iterable)
function--函数
iterable--序列,序列的每个元素作为参数传递给函数进行判断,然后返回True或False,最后将返回True的元素放到迭代器对象中。
使用例子:
defisEven(x): returnx%2==0 list1=filter(isEven,[1,2,3,4,5,6]) print(list(list1))#输出:[2,4,6] #可以用lambda list2=filter(lambdax:x%2==0,[1,2,3,4,5,6]) print(list(list2))#输出:[2,4,6] #也可以用列表推导式 list3=list(xforxin[1,2,3,4,5,6]ifx%2==0) print(list3)#输出:[2,4,6]
三、map()函数
map()接收一个函数f和一个或多个序列list,并通过把函数f依次作用在list的每个元素上,得到一个新的迭代器(Python2是列表)并返回。
语法:
map(function,iterable,...)
function--函数,如果iterable有多个序列,则function的参数也对应有多个
iterable--一个或多个序列
使用例子:
defmulti(x): returnx*2 defmulti2(x,y): returnx*y #参数只有1个序列时 list1=map(multi,[1,2,3,4,5]) print(list(list1))#输出:[2,4,6,8,10] #用lambda改写上面语句 list1_1=map(lambdax:x*2,[1,2,3,4,5]) print(list(list1_1))#输出:[2,4,6,8,10] #参数有2个序列时, list2=map(multi2,[1,2,3,4,5],[6,7,8,9,10]) print(list(list2))#对2个列表数据的相同位置元素相乘,输出:[6,14,24,36,50] #用lambda改写上面语句 list2_1=map(lambdax,y:x*y,[1,2,3,4,5],[6,7,8,9,10]) print(list(list2_1))#输出:[6,14,24,36,50] #当2个序列长度不一致时,结果以2个序列中的最短长度为准 list2_2=map(lambdax,y:x*y,[1,2,3],[6,7,8,9,10]) print(list(list2_2))#输出:[6,14,24] list2_3=map(lambdax,y:x*y,[1,2,3,4,5],[6,7,8]) print(list(list2_3))#输出:[6,14,24]
四、reduce()函数
reduce()函数对一个数据集合的所有数据进行操作:用传给reduce中的函数function(必须有两个参数)先对集合中的第1、2个元素进行操作,得到的结果再与第三个数据用function函数运算,最后得到一个结果。
在Python2中reduce()是内置函数,Pytho3移到functools模块。
语法:
reduce(function,iterable[,initializer])
function--函数,有两个参数
iterable--可迭代对象
initializer--可选,初始参数
使用例子:
fromfunctoolsimportreduce defadd(x,y): returnx+y defmulit(x,y): returnx*y print(reduce(add,[1,2,3,4,5]))#输出:15 print(reduce(add,[1,2,3,4,5],10))#输出:25 print(reduce(mulit,[1,2,3,4,5]))#输出:120 print(reduce(mulit,[1,2,3,4,5],10))#输出:1200 print(reduce(lambdax,y:x+y,[1,2,3,4,5]))#输出:15 print(reduce(lambdax,y:x+y,[1,2,3,4,5],10))#输出:25
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。