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条件和循环的使用方法
Nov 01 Python
在windows系统中实现python3安装lxml
Mar 23 Python
批量获取及验证HTTP代理的Python脚本
Apr 23 Python
python 删除指定时间间隔之前的文件实例
Apr 24 Python
解决python3 Pycharm上连接数据库时报错的问题
Dec 03 Python
Python JSON格式数据的提取和保存的实现
Mar 22 Python
python实现二分类的卡方分箱示例
Nov 22 Python
Python3基本输入与输出操作实例分析
Feb 14 Python
Python如何用wx模块创建文本编辑器
Jun 07 Python
Python日志器使用方法及原理解析
Sep 27 Python
python游戏开发之pygame实现接球小游戏
Apr 22 Python
Pygame游戏开发之太空射击实战敌人精灵篇
Aug 05 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 事件机制(2)
2011/03/23 PHP
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
CI框架安全类Security.php源码分析
2014/11/04 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
PHP实现添加购物车功能
2017/03/06 PHP
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
vue路由传参的基本实现方式小结【三种方式】
2020/02/05 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
Vuex实现购物车小功能
2020/08/17 Javascript
python套接字流重定向实例汇总
2016/03/03 Python
Python中查看文件名和文件路径
2017/03/31 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
一份python入门应该看的学习资料
2018/04/11 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
2020/02/26 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
python Scrapy框架原理解析
2021/01/04 Python
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
英国医生在线预约:Top Doctors
2019/10/30 全球购物
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
护士求职信范文
2014/05/24 职场文书
中小学生学籍证明
2014/10/25 职场文书
影视后期实训报告
2014/11/05 职场文书
公司借条范本
2015/05/25 职场文书
中学总务处工作总结
2015/08/12 职场文书
SSM VUE Axios详解
2021/10/05 Vue.js