Python lambda表达式filter、map、reduce函数用法解析


Posted in Python onSeptember 11, 2019

前言

lambda是表达式,用于创建匿名函数,可以和filter、map、reduce配合使用。

本文环境Python3.7。

一、lambda表达式

lambda 只包含一个语句,用于创建匿名函数。

语法:

lambda [arg1 [,arg2,.....argn]]:expression

arg1 -- 参数,可以有多个

expression -- 表达式

使用例子:

f1 = lambda x : x > 10
print(f1(1)) #输出:False
print(f1(11)) #输出:True
f2 = lambda x, y: x + y
print(f2(1,2)) #输出:3

二、filter() 函数

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回迭代器对象(Python2是列表),可以使用list()转换为列表。

语法:

filter(function, iterable)

function -- 函数

iterable -- 序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到迭代器对象中。

使用例子:

def isEven(x):
  return x % 2 == 0
list1 = filter(isEven,[1,2,3,4,5,6])
print(list(list1)) #输出:[2, 4, 6]
#可以用lambda
list2 = filter(lambda x:x%2==0, [1,2,3,4,5,6])
print(list(list2)) #输出:[2, 4, 6]
#也可以用列表推导式
list3 = list(x for x in [1,2,3,4,5,6] if x%2==0)
print(list3) #输出:[2, 4, 6]

三、map()函数

map()接收一个函数 f 和一个或多个序列 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 迭代器(Python2是列表) 并返回。

语法:

map(function, iterable, ...)

function -- 函数,如果iterable有多个序列,则function的参数也对应有多个

iterable -- 一个或多个序列

使用例子:

def multi(x):
  return x * 2

def multi2(x, y):
  return x * y

#参数只有1个序列时
list1 = map(multi,[1,2,3,4,5])
print(list(list1)) #输出:[2, 4, 6, 8, 10]

#用lambda改写上面语句
list1_1 = map(lambda x : 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(lambda x,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(lambda x,y : x*y, [1,2,3],[6,7,8,9,10])
print(list(list2_2)) #输出:[6, 14, 24]
list2_3 = map(lambda x,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 -- 可选,初始参数

使用例子:

from functools import reduce
def add(x, y):
  return x + y
def mulit(x, y):
  return x * 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(lambda x,y:x+y,[1, 2, 3, 4, 5]))#输出:15
print(reduce(lambda x,y:x+y,[1, 2, 3, 4, 5], 10))#输出:25

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中set与frozenset方法和区别详解
May 23 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
详解django中使用定时任务的方法
Sep 27 Python
pygame实现雷电游戏雏形开发
Nov 20 Python
Python函数装饰器常见使用方法实例详解
Mar 30 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
python Django里CSRF 对应策略详解
Aug 05 Python
Keras之自定义损失(loss)函数用法说明
Jun 10 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
python 模拟登陆github的示例
Dec 04 Python
解决Python字典查找报Keyerror的问题
May 26 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
Sep 11 #Python
Python range、enumerate和zip函数用法详解
Sep 11 #Python
Python 实现文件读写、坐标寻址、查找替换功能
Sep 11 #Python
Python使用APScheduler实现定时任务过程解析
Sep 11 #Python
基于Python实现剪切板实时监控方法解析
Sep 11 #Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 #Python
面向对象学习之pygame坦克大战
Sep 11 #Python
You might like
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
web 页面分页打印的实现
2009/06/22 Javascript
JQuery 无废话系列教程(二) jquery实战篇上
2009/06/23 Javascript
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
javascript 拖动表格行实现代码
2011/05/05 Javascript
js文件缓存之版本管理详解
2013/07/05 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
浅谈一个webpack构建速度优化误区
2019/06/24 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
解读Python中degrees()方法的使用
2015/05/18 Python
Python中装饰器高级用法详解
2017/12/25 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
基于Python函数和变量名解析
2019/07/19 Python
购买大码女装:Lane Bryant
2016/09/07 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
函授毕业生自我鉴定范文
2014/03/25 职场文书
技术入股协议书
2016/03/22 职场文书
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技