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

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函数的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python中lambda()的用法

    在C++11和C#中都有匿名函数的存在.下面看看在python中匿名函数的使用. 1.lambda只是一个表达式,函数体比def简单很多. 2.lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. 3.lambda表达式是起到一个函数速写的作用.允许在代码内嵌入一个函数的定义. 例1.定义一个lambda表达式,求三个数的和 # -*- coding: UTF-8 -*- f = lambda x,y,z:x + y + z print f(1,2,

  • python 用lambda函数替换for循环的方法

    场景如下: 现在有一个dataframe,其中一列为score,值从0-100, df: score 98 88 37 68 86 33 现在需要增加一列level,给这些分数分类,90分以上为A,60-90为B,60以下为C. 常用的方法肯定是使用for循环,对每一行进行处理. import pandas as pd list = [98,88,37,68,86,33] df = pd.DataFrame(list, columns=['score']) # convert list to d

  • 详解Python的Lambda函数与排序

    lambda函数是一种快速定义单行的最小函数,是从 Lisp 借用来的,可以用在任何需要函数的地方.下面的例子比较了传统的函数与lambda函数的定义方式. 前几天看到了一行求1000的阶乘的Python代码 Python代码 print reduce(lambda x,y:x*y, range(1, 1001)) 一下子被python代码的精简与紧凑所折服,故对代码进行了简单的分析. reduce与range都是Python的内置函数. range(1,1001)表示生成1到1000的连续整数

  • Python lambda函数基本用法实例分析

    本文实例讲述了Python lambda函数基本用法.分享给大家供大家参考,具体如下: 这里我们简单学习一下python lambda函数. 首先,看一下python lambda函数的语法,如下: f=lambda [parameter1,parameter2,--]:expression lambda语句中,冒号前是参数,可以有0个或多个,用逗号隔开,冒号右边是返回值.lambda语句构建的其实是一个函数对象. 1>无参数 f=lambda :'python lambda!' >>&

  • Python 中的lambda函数介绍

    Lambda函数,即Lambda 表达式(lambda expression),是一个匿名函数(不存在函数名的函数),Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction). 一.lambda函数也叫匿名函数,即,函数没有具体的名称.先来看一个最简单例子: def f(x): return x**2 print f(4) Python中使用lambda的话,写成这样 g = lambda x : x**2 print g(4) 二.la

  • Python3中lambda表达式与函数式编程讲解

    简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数.其一般有如下几种使用方式: 1.lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式.lambda是一个表达式而不是一个语句.它能够出现在Python语法不允许def出现的地方.作为表达式,lambda返回一个值(即一个新的函数).lambda用来编写简单的函数,而def用来处理更强大的任务.例如: f = lambda x,y

  • 简单介绍Python中的filter和lambda函数的使用

    filter(function or None, sequence),其中sequence 可以是list ,tuple,string.这个函数的功能是过滤出sequence 中所有以元素自身作... filter(function or None, sequence),其中sequence 可以是list ,tuple,string.这个函数的功能是过滤出sequence 中所有以元素自身作为参数调用function时返回True或bool(返回值)为True的元素并以列表返回. filter

  • python内置函数:lambda、map、filter简单介绍

    lambda lambda可以理解为一种小函数,但是它是一个表达式,而不是一个语句,所以在def不允许出现的地方仍然可以使用lambda函数,例如list里.但是lambda内只可以执行一个表达式. def f(x): return x**2 print f(3) a = lambda x: x**2 print a(3) a = lambda x,y: x+y print a(1,2) ~ 一个lambda语句就相当于一个函数定义,调用的时候也和函数一样. map函数 有时候我们可以需要处理一

  • 在Python中使用lambda高效操作列表的教程

    介绍 lambda Python用于支持将函数赋值给变量的一个操作符 默认是返回的,所以不用再加return关键字,不然会报错 result = lambda x: x * x result(2) # return 4 map()/filter()/reduce() 需要两个参数,第一个是一个处理函数,第二个是一个序列(list,tuple,dict) map() 将序列中的元素通过处理函数处理后返回一个新的列表 filter() 将序列中的元素通过函数过滤后返回一个新的列表 reduce()

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

    1. 过滤器 Python 具有通过列表解析 将列表映射到其它列表的强大能力.这种能力同过滤机制结合使用,使列表中的有些元素被映射的同时跳过另外一些元素. 过滤列表语法: [ mapping-expression for element in source-list if filter-expression ] 这是列表解析的扩展,前三部分都是相同的,最后一部分,以 if开头的是过滤器表达式.过滤器表达式可以是返回值为真或者假的任何表达式 (在 Python 中是几乎任何东西).任何经过滤器表达

  • python 常见字符串与函数的用法详解

    strip去除空格 s = ' abcd efg ' print(s.strip()) #去除所有空格 print(s.lstrip()) #去除左边空格 print(s.rstrip()) #去除右边空格 print(s) abcd efg abcd efg abcd efg abcd efg 大小写 s = 'abc defg' print(s.upper()) print(s.upper().lower()) print(s.capitalize()) #首字母大写 ABC DEFG ab

  • python 函数中的内置函数及用法详解

    今天来介绍一下Python解释器包含的一系列的内置函数,下面表格按字母顺序列出了内置函数: 下面就一一介绍一下内置函数的用法: 1.abs() 返回一个数值的绝对值,可以是整数或浮点数等. print(abs(-18)) print(abs(0.15)) result: 18 0.15 2.all(iterable) 如果iterable的所有元素不为0.''.False或者iterable为空,all(iterable)返回True,否则返回False. print(all(['a','b',

  • Python Lambda函数使用总结详解

    这篇文章主要介绍了Python Lambda函数使用总结详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法.作为python初学者,本文整理了lambda的一些基本用法和特点. lambda和def的对应关系 定义func函数,计算给定数x的平方 def func(x): return x*x 等价于 func = lambda x: x

  • python使用numpy中的size()函数实例用法详解

    在python中,提到如何计算多维数组和矩阵,那一定会想到numpy.numpy定义了矩阵和数组,为它们提供了相关的运算.size中文解释为大家.尺寸的意思,如果想要统计矩阵元素个数,使用size()函数就可以解决. 1.Numpy size()函数 主要是用来统计矩阵元素个数,或矩阵某一维上的元素个数的函数. 2.使用语法 numpy.size(a, axis=None) 3.使用参数 a:输入的矩阵 axis:int型的可选参数,指定返回哪一维的元素个数.当没有指定时,返回整个矩阵的元素个数

  • python3中apply函数和lambda函数的使用详解

    目录 lambda函数 lambda是什么 lambda用法详解 lambda+map lambda+ filter lambda+ reduce 避免过度使用lambda 适合lambda的场景 总结 apply函数 lambda函数 lambda是什么 大家好,今天给大家带来的是有关于Python里面的lambda表达式详细解析.lambda在Python里面的用处很广,但说实话,我个人认为有关于lambda的讨论不是如何使用的问题,而是该不该用的问题.接下来还是通过大量实例和大家分享我的学

  • Python中index()和seek()的用法(详解)

    1.index() 一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错,比如: >>> t=tuple('Allen') >>> t ('A', 'l', 'l', 'e', 'n') >>> t.index('a') Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> t.index('a') V

  • python操作列表的函数使用代码详解

    python的列表很重要,学习到后面你会发现使用的地方真的太多了.最近在写一些小项目时经常用到列表,有时其中的方法还会忘哎! 所以为了复习写下了这篇博客,大家也可以来学习一下,应该比较全面和详细了 列表(list): 用来存放相同或者不同元素(字符)用逗号隔开的一个存储方式. list我个人认为最重要的有一点大家可能都容易忽略那就是复制列表,这点文章最后来讲解 定义三个列表的样例 lis = [1, 2, 3, 4, 5, 6] lis = ['a', 'b', 'c', 'd'] lis =

  • 对python中assert、isinstance的用法详解

    1. assert 函数说明: Assert statements are a convenient way to insert debugging assertions into a program: assert语句是一种插入调试断点到程序的一种便捷的方式. 使用范例: assert 3 == 3 assert 1 == True assert (4 == 4) print('-----------') assert (3 == 4) ''' 抛出AssertionError异常,后面程序不

  • Python中 Global和Nonlocal的用法详解

    nonlocal 和 global 也很容易混淆.简单记录下自己的理解. 解释 global 总之一句话,作用域是全局的,就是会修改这个变量对应地址的值. global 语句是一个声明,它适用于整个当前代码块. 这意味着列出的标识符将被解释为全局变量. 尽管自由变量可能指的是全局变量而不被声明为全局变量. global 语句中列出的名称不得用于该全局语句之前的文本代码块中. global 语句中列出的名称不能定义为形式参数,也不能在 for 循环控制目标. class 定义.函数定义. impo

随机推荐