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中使用strip()方法删除字符串中空格的教程
May 20 Python
Python绘制七段数码管实例代码
Dec 20 Python
python批量赋值操作实例
Oct 22 Python
Python的条件表达式和lambda表达式实例
Jan 31 Python
在python中画正态分布图像的实例
Jul 08 Python
使用TensorFlow实现简单线性回归模型
Jul 19 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
Aug 09 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
Oct 24 Python
Django 实现外键去除自动添加的后缀‘_id’
Nov 15 Python
解决python运行启动报错问题
Jun 01 Python
Python eval函数原理及用法解析
Nov 14 Python
在pycharm创建scrapy项目的实现步骤
Dec 01 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+MySQL 制作简单的留言本
2009/11/02 PHP
php上的memcache和memcached两个pecl库
2010/03/29 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
javascript some()函数用法详解
2014/11/13 PHP
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
python 输出一个两行字符的变量
2009/02/05 Python
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
Python实现控制台输入密码的方法
2015/05/29 Python
对pandas中to_dict的用法详解
2018/06/05 Python
django框架ModelForm组件用法详解
2019/12/11 Python
执行Python程序时模块报错问题
2020/03/26 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
Hotels.com中国区:好订网
2016/08/18 全球购物
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
小学三八妇女节活动方案
2014/03/16 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
公路绿化方案
2014/05/12 职场文书
教师读书活动心得体会
2016/01/14 职场文书
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python
mysql 获取时间方式
2022/03/20 MySQL
python blinker 信号库
2022/05/04 Python
Python 中面向接口编程
2022/05/20 Python