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中用Spark模块的使用教程
Apr 13 Python
Python的Django框架中的Context使用
Jul 15 Python
在Django的通用视图中处理Context的方法
Jul 21 Python
python下实现二叉堆以及堆排序的示例
Sep 29 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
python opencv之SIFT算法示例
Feb 24 Python
解决pycharm 误删掉项目文件的处理方法
Oct 22 Python
pycharm 中mark directory as exclude的用法详解
Feb 14 Python
python实现小程序推送页面收录脚本
Apr 20 Python
python3.7+selenium模拟淘宝登录功能的实现
May 26 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
Nov 28 Python
python实现计算器简易版
Dec 17 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 CKEditor 上传图片实现代码
2009/11/06 PHP
PHP 工厂模式使用方法
2010/05/18 PHP
php定时计划任务与fsockopen持续进程实例
2014/05/23 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
js实现文本框中焦点在最后位置
2014/03/04 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
Vue2 配置 Axios api 接口调用文件的方法
2017/11/13 Javascript
vue.extend实现alert模态框弹窗组件
2018/04/28 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
Python 错误和异常小结
2013/10/09 Python
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
Django 前后台的数据传递的方法
2017/08/08 Python
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
详解python对象之间的交互
2020/09/29 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
四年大学生活的个人自我评价
2013/12/11 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers