对python过滤器和lambda函数的用法详解
1.过滤器
Python具有通过列表解析将列表映射到其它列表的强大能力。这种能力同过滤机制结合使用,使列表中的有些元素被映射的同时跳过另外一些元素。
过滤列表语法:[mapping-expressionforelementinsource-listiffilter-expression]
这是列表解析的扩展,前三部分都是相同的,最后一部分,以if开头的是过滤器表达式。过滤器表达式可以是返回值为真或者假的任何表达式(在Python中是几乎任何东西)。任何经过滤器表达式演算值为真的元素都可以包含在映射中,其它的元素都将忽略,它们不会进入映射表达式,更不会包含在输出列表中。
列表过滤介绍
>>>li=["a","mpilgrim","foo","b","c","b","d","d"] >>>[elemforeleminliiflen(elem)>1] ['mpilgrim','foo'] //由于Python会遍历整个列表,它将对每个元素执行过滤器表达式,如果过滤器表达式演算值为真,该元素就会被映射,同时映射表达式的结果将包含在返回的列表中,这里过滤掉了所有单字符的字符串,留下了一个由长字符串构成的列表。 >>>[elemforeleminliifelem!="b"] ['a','mpilgrim','foo','c','d','d'] //这里过滤掉了一个特定值b,注意这个过滤器会过滤掉所有的b,因为每次取出b,过滤表达式都将为假。 >>>[elemforeleminliifli.count(elem)==1] ['a','mpilgrim','foo','c'] //count是一个列表方法,返回某个值在列表中出现的次数,你可以认为这个过滤器将从列表中删除重复元素,返回一个只包含了在原始列表中有着唯一值拷贝的列表。但并非如此,因为在原始列表中出现两次的值(在本例中,b和d)被完全剔除了,从一个列表中排除重复值有多种方法,但过滤并不是其中的一种。
filter内置函数
Python2.7.13官方文档中的介绍:filter(function,iterable)Constructalistfromthoseelementsofiterableforwhichfunctionreturnstrue.iterablemaybeeitherasequence,acontainerwhichsupportsiteration,oraniterator.Ifiterableisastringoratuple,theresultalsohasthattype;otherwiseitisalwaysalist.IffunctionisNone,theidentityfunctionisassumed,thatis,allelementsofiterablethatarefalseareremoved.
Notethatfilter(function,iterable)isequivalentto[itemforiteminiterableiffunction(item)]iffunctionisnotNoneand[itemforiteminiterableifitem]iffunctionisNone.
Seeitertools.ifilter()anditertools.ifilterfalse()foriteratorversionsofthisfunction,includingavariationthatfiltersforelementswherethefunctionreturnsfalse.
Python内建的filter()函数用于过滤序列
//保留长度大于1的字符串 >>>li=["a","mpilgrim","foo","b","c","b","d","d"] >>>deffunc(s): ...returnlen(s)>1 >>>filter(func,li) ['mpilgrim','foo'] //删除奇数 >>>defdel_odd(n): ...returnn%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借用来的,可以用在任何需要函数的地方。
>>>deff(x): ...returnx*2 >>>f(3) 6 >>>g=lambdax:x*2 >>>g(3) 6 //这是一个lambda函数,完成同上面普通函数相同的事情。注意这里的简短的语法:在参数列表周围没有括号,而且忽略了return关键字(隐含存在,因为整个函数只有一行)。而且,该函数没有函数名称,但是可以将它赋值给一个变量进行调用。 >>>(lambdax:x*2)(3) 6 //使用lambda函数时甚至不需要将它赋值给一个变量。
总的来说,lambda函数可以接收任意多个参数(包括可选参数)并且返回单个表达式的值。lambda函数不能包含命令,包含的表达式不能超过一个,不要试图向lambda函数中塞入太多的东西,如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长。
Note:lambda函数是可选的,它是一种风格问题,不一定非要使用它们,任何能够使用它们的地方,都可以定义一个单独的普通函数来进行替换,应将它们用在需要封装特殊的、非重用代码上,避免代码充斥着大量单行函数。
以上这篇对python过滤器和lambda函数的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。