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创建文件和追加文件内容实例
Oct 21 Python
python中日期和时间格式化输出的方法小结
Mar 19 Python
Python2.7简单连接与操作MySQL的方法
Apr 27 Python
Python yield 使用方法浅析
May 20 Python
Django 添加静态文件的两种实现方法(必看篇)
Jul 14 Python
Python中文件的读取和写入操作
Apr 27 Python
解决Python requests库编码 socks5代理的问题
May 07 Python
在Pycharm terminal中字体大小设置的方法
Jan 16 Python
使用TensorFlow实现二分类的方法示例
Feb 05 Python
Django后台管理系统的图文使用教学
Jan 20 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 Python
python之np.argmax()及对axis=0或者1的理解
Jun 02 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
PHP技术开发技巧分享
2010/03/23 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
2014/08/25 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
2016/10/20 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
python并发2之使用asyncio处理并发
2017/12/21 Python
Python使用OpenCV进行标定
2018/05/08 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
python3实现弹弹球小游戏
2019/11/25 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
2020/03/10 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
什么是反射
2012/03/17 面试题
2014自主招生自荐信策略
2014/01/27 职场文书
入党申请自荐书范文
2014/02/11 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
老公保证书怎么写
2015/02/26 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书