您的位置:首页 > 编程语言 > Python开发

Python filter,map,lambda,reduce,列表解析

2016-02-18 10:58 603 查看
filter用法filter(func,seq)

将seq的元素逐一代入func,通过func的返回值来判断是保留还是过滤

>>>deffoo(x):
returnx>3

>>>filter(foo,range(6))
[4,5]

>>>filter(lambdax:x>3,range(6))
[4,5]

#注意只需要写函数名,不带参数


map用法map(func/lambda,seq)

通过函数对队列中的每个元素进行操作,元素替换成返回值,注意是生成一个新的序列,原来的序列不会变化

>>>map(lambdax:x*2,range(6))
[0,2,4,6,8,10]
#同样的,这里要么是lambda表达式,要不就是是个函数名
>>>a
[1,2,3,4,5,6]
>>>map(foo,a)
[False,False,False,True,True,True]
>>>a
[1,2,3,4,5,6]
#foo是判断x是否大于三,是返回True,否返回false
对多个序列的操作

>>>map(lambdax,y:x+y,range(4),range(5))


Traceback(mostrecentcalllast):
File"<pyshell#84>",line1,in<module>
map(lambdax,y:x+y,range(4),range(5))
File"<pyshell#84>",line1,in<lambda>
map(lambdax,y:x+y,range(4),range(5))
TypeError:unsupportedoperandtype(s)for+:'NoneType'and'int'
>>>map(lambdax,y:x+y,range(4),range(4))
[0,2,4,6]



列表解析

[表达式/函数,for循环]

>>>[x**2forxinrange(6)]
[0,1,4,9,16,25]
>>>[a**2forxinrange(6)]
[1,1,1,1,1,1]
>>>#可见当你写一个for循环中无关的变量时,它仅仅重复表达式的结果
>>>[foo(x)forxinrange(6)]
[False,False,False,False,True,True]
#这里的函数要带括号,foo同上
>>>[lambdax:x**2forxinrange(6)]
[<function<lambda>at0x01DE8870>,<function<lambda>at0x01DE8830>,<function<lambda>at0x01DE88F0>,<function<lambda>at0x01DE8930>,<function<lambda>at0x01DE8970>,<function<lambda>at0x01DE89B0>]
>>>[(lambdax:x**2)(x)forxinrange(6)]
[0,1,4,9,16,25]
#同样你需要把lambda看作是函数名,或者返回值
>>>[x**2forxinrange(6)ifx**2>9]
[16,25]
>>>[(x**2,y**3)forxinrange(4)foryinrange(3)ifx>0andy>0]
[(1,1),(1,8),(4,1),(4,8),(9,1),(9,8)]
>>>#将后面的for看成嵌套的,还有前面的表达式记得加括号


reduce对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用

>>>reduce(lambdax,y:x+y,range(1,101))
5050
>>>#reduce一定是接受一个二元函数,比如上面就是(((1+2)+3)+4)+...
>>>reduce(lambdax,y:x+y,range(1,101),100)
5150
#接受的初始值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: