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对象转JSON字符串的方法
Apr 27 Python
python实现多线程的两种方式
May 22 Python
关于numpy中np.nonzero()函数用法的详解
Feb 07 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
pandas系列之DataFrame 行列数据筛选实例
Apr 12 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
Python数据类型之Dict字典实例详解
May 07 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
Jun 04 Python
python 五子棋如何获得鼠标点击坐标
Nov 04 Python
Python3 全自动更新已安装的模块实现
Jan 06 Python
用python给csv里的数据排序的具体代码
Jul 17 Python
Python 多线程处理任务实例
Nov 07 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实现验证码功能
2006/10/09 PHP
MVC模式的PHP实现
2006/10/09 PHP
BBS(php & mysql)完整版(八)
2006/10/09 PHP
修改发贴的编辑功能
2007/03/07 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
浅谈JavaScript的闭包函数
2016/12/08 Javascript
bootstrap日历插件datetimepicker使用方法
2016/12/14 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
浅谈vue 单文件探索
2018/09/05 Javascript
详解npm 配置项registry修改为淘宝镜像
2018/09/07 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
JS实现炫酷轮播图
2020/11/15 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
2020/11/09 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
python 实现线程之间的通信示例
2020/02/14 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
工作自荐信
2013/12/11 职场文书
本科生职业生涯规划书范文
2014/01/21 职场文书
工作决心书范文
2014/03/11 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
JS数组的常用方法整理
2021/03/31 Javascript
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers