对python过滤器和lambda函数的用法详解


Posted in Python onJanuary 21, 2019

1. 过滤器

Python 具有通过列表解析 将列表映射到其它列表的强大能力。这种能力同过滤机制结合使用,使列表中的有些元素被映射的同时跳过另外一些元素。

过滤列表语法: [ mapping-expression for element in source-list if filter-expression ]

这是列表解析的扩展,前三部分都是相同的,最后一部分,以 if开头的是过滤器表达式。过滤器表达式可以是返回值为真或者假的任何表达式 (在 Python 中是几乎任何东西)。任何经过滤器表达式演算值为真的元素都可以包含在映射中,其它的元素都将忽略,它们不会进入映射表达式,更不会包含在输出列表中。

列表过滤介绍

>>> li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]
>>> [elem for elem in li if len(elem) > 1]
['mpilgrim', 'foo']
// 由于 Python 会遍历整个列表,它将对每个元素执行过滤器表达式,如果过滤器表达式演算值为真,该元素就会被映射,同时映射表达式的结果将包含在返回的列表中,这里过滤掉了所有单字符的字符串,留下了一个由长字符串构成的列表。

>>> [elem for elem in li if elem != "b"]
['a', 'mpilgrim', 'foo', 'c', 'd', 'd']
// 这里过滤掉了一个特定值 b ,注意这个过滤器会过滤掉所有的 b, 因为每次取出 b, 过滤表达式都将为假。

>>> [elem for elem in li if li.count(elem) == 1]
['a', 'mpilgrim', 'foo', 'c']
// count 是一个列表方法,返回某个值在列表中出现的次数,你可以认为这个过滤器将从列表中删除重复元素,返回一个只包含了在原始列表中有着唯一值拷贝的列表。但并非如此,因为在原始列表中出现两次的值 (在本例中, b 和 d ) 被完全剔除了,从一个列表中排除重复值有多种方法,但过滤并不是其中的一种。

filter 内置函数

Python2.7.13官方文档中的介绍: filter(function, iterable) Construct a list from those elements of iterable for which function returns true. iterable may be either a sequence, a container which supports iteration, or an iterator. If iterable is a string or a tuple, the result also has that type; otherwise it is always a list. If function is None, the identity function is assumed, that is, all elements of iterable that are false are removed.

Note that filter(function, iterable) is equivalent to [item for item in iterable if function(item)] if function is not None and [item for item in iterable if item] if function is None.

See itertools.ifilter() and itertools.ifilterfalse() for iterator versions of this function, including a variation that filters for elements where the function returns false.

Python内建的filter()函数用于过滤序列

// 保留长度大于1的字符串
>>> li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]
>>> def func(s):
... return len(s) > 1

>>> filter(func,li)
['mpilgrim', 'foo']

// 删除奇数
>>> def del_odd(n):
... return n % 2 == 0
>>> filter(del_odd,[0,1,2,3,4,5,6,7,8,9])
[0, 2, 4, 6, 8]

2. lambda函数

Python 支持一种有趣的语法, 它允许你快速定义单行的最小函数, 这些叫做

lambda 的函数, 是从 Lisp 借用来的, 可以用在任何需要函数的地方。

>>> def f(x):
... return x*2 
>>> f(3)
6

>>> g = lambda x : x*2
>>> g(3)
6
// 这是一个 lambda 函数,完成同上面普通函数相同的事情。注意这里的简短的语法:在参数列表周围没有括号,而且忽略了 return 关键字 (隐含存在,因为整个函数只有一行)。而且,该函数没有函数名称,但是可以将它赋值给一个变量进行调用。

>>> (lambda x : x*2)(3)
6
// 使用 lambda 函数时甚至不需要将它赋值给一个变量。

总的来说, lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。 lambda 函数不能包含命令, 包含的表达式不能超过一个, 不要试图向 lambda 函数中塞入太多的东西, 如果你需要更复杂的东西, 应该定义一个普通函数, 然后想让它多长就多长。

Note: lambda函数 是可选的, 它是一种风格问题,不一定非要使用它们,任何能够使用它们的地方,都可以定义一个单独的普通函数来进行替换,应将它们用在需要封装特殊的、非重用代码上,避免代码充斥着大量单行函数。

以上这篇对python过滤器和lambda函数的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现决策树
Dec 21 Python
致Python初学者 Anaconda入门使用指南完整版
Apr 05 Python
python 构造三维全零数组的方法
Nov 12 Python
python2.7使用plotly绘制本地散点图和折线图
Apr 02 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 Python
python f-string式格式化听语音流程讲解
Jun 18 Python
pytorch获取vgg16-feature层输出的例子
Aug 20 Python
Python数据存储之 h5py详解
Dec 26 Python
Pytorch之view及view_as使用详解
Dec 31 Python
Python中私有属性的定义方式
Mar 05 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
Jan 28 Python
利用Python正则表达式过滤敏感词的方法
Jan 21 #Python
Python 实现王者荣耀中的敏感词过滤示例
Jan 21 #Python
opencv python统计及绘制直方图的方法
Jan 21 #Python
python numpy 按行归一化的实例
Jan 21 #Python
python树莓派红外反射传感器
Jan 21 #Python
python实现自动解数独小程序
Jan 21 #Python
python 将对象设置为可迭代的两种实现方法
Jan 21 #Python
You might like
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
PHP中替换键名的简易方法示例详解
2014/01/07 PHP
php短址转换实现方法
2015/02/25 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
Knockoutjs 学习系列(二)花式捆绑
2016/06/07 Javascript
从0开始学Vue
2016/10/27 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
Python中的多重装饰器
2015/04/11 Python
使用python实现rsa算法代码
2016/02/17 Python
详解Python中的Descriptor描述符类
2016/06/14 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
德国高性价比网上药店:medpex
2017/07/09 全球购物
社区庆中秋节活动方案
2014/02/07 职场文书
高中军训第一天感言
2014/03/06 职场文书
实习会计求职自荐信范文
2014/03/10 职场文书
雷人标语集锦
2014/06/19 职场文书
师范学院毕业生求职信
2014/06/24 职场文书
自愿离婚协议书范本2016
2016/03/18 职场文书
创业计划书之服装
2019/10/07 职场文书