对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基础教程之基本数据类型和变量声明介绍
Aug 29 Python
Python计算回文数的方法
Mar 11 Python
Python随机读取文件实现实例
May 25 Python
关于python的list相关知识(推荐)
Aug 30 Python
Python进阶之尾递归的用法实例
Jan 31 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
详解Python爬取并下载《电影天堂》3千多部电影
Apr 26 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
python 利用turtle库绘制笑脸和哭脸的例子
Nov 23 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
Mar 09 Python
python为QT程序添加图标的方法详解
Mar 09 Python
Python OpenCV形态学运算示例详解
Apr 07 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
php Mysql日期和时间函数集合
2007/11/16 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
微信API接口大全
2015/04/15 PHP
php编程每天必学之表单验证
2016/03/01 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
Js切换功能的简单方法
2010/11/23 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
2016/05/10 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
2016/09/09 Javascript
浅谈react+es6+webpack的基础配置
2017/08/09 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
Python使用multiprocessing创建进程的方法
2015/06/04 Python
Python计算一个文件里字数的方法
2015/06/15 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
python 导入数据及作图的实现
2019/12/03 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
计算机专业个人求职信范例
2013/09/23 职场文书
专科毕业生自我鉴定
2013/12/01 职场文书
青年创业培训欢迎词
2014/01/08 职场文书
机关财务管理制度
2014/01/17 职场文书
会计核算科岗位职责
2014/03/19 职场文书
医药营销个人求职信
2014/04/12 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers