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实现的系统实用log类实例
Jun 30 Python
python字符串过滤性能比较5种方法
Jun 22 Python
Python向MySQL批量插数据的实例讲解
Mar 31 Python
Python读取txt内容写入xls格式excel中的方法
Oct 11 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
python3中类的继承以及self和super的区别详解
Jun 26 Python
python飞机大战pygame碰撞检测实现方法分析
Dec 17 Python
基于python修改srt字幕的时间轴
Feb 03 Python
tensorflow之读取jpg图像长和宽实例
Jun 18 Python
基于python实现简单C/S模式代码实例
Sep 14 Python
python 如何实现遗传算法
Sep 22 Python
python 无损批量压缩图片(支持保留图片信息)的示例
Sep 22 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
使用NetBeans + Xdebug调试PHP程序的方法
2011/04/12 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
js post提交调用方法
2014/02/12 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
Python中os.path用法分析
2015/01/15 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
openCV提取图像中的矩形区域
2020/07/21 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
2021/01/24 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
Paper Cape官网:美国婴儿和儿童服装品牌
2019/11/02 全球购物
护理学专业推荐信
2013/12/03 职场文书
大学生冰淇淋店商业计划书
2014/01/14 职场文书
材料化学专业求职信
2014/07/15 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
2022/04/13 Java/Android