Python filter,map,lambda,reduce,列表解析
2016-02-18 10:58
603 查看
filter用法filter(func,seq)
将seq的元素逐一代入func,通过func的返回值来判断是保留还是过滤
>>>filter(lambdax:x>3,range(6))
[4,5]
map用法map(func/lambda,seq)
通过函数对队列中的每个元素进行操作,元素替换成返回值,注意是生成一个新的序列,原来的序列不会变化
>>>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循环]
reduce对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用
将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
#接受的初始值
相关文章推荐
- Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
- Python之enumerate
- python 基础(四) 正则,递归 生成器
- 不相交集python实现
- Python之计算器(第四天)
- Python文本处理常用代码总结(二)
- 在python官网下载了安装包双击之后没有反应?
- Python的getattr(),setattr(),delattr(),hasattr()
- python之计算器(第四天)
- python之haproxy配置文件操作(第三天)
- python装饰器与递归算法详解
- python语法学习
- python基础: day4作业计算器
- Python 实用技巧
- 转 Selenium+Python+Eclipse网页自动化集成环境配置(附简单的测试程序)
- Python文本处理常用代码总结(一)
- Python渗透测试工具合集
- python基础学习四
- python基础学习七: 列表生成式
- Python利用Nagios增加微信报警通知的功能