这一节,我们将主要学习用于list的三个内建函数: filter(), map(), 和 reduce().
1.filter(function, sequence) 逐个从sequence中取一个元素,传入function,返回一个使function为真的序列。 如果参数sequence是str、unicode或者tuple,则返回相同的类型,否则都返回一个list
参数function:只有一个参数的函数,如果function为None,filter()将返回整个sequence。
参数sequence:一个序列(字符串、元组、列表等)
1 2 3 4 5 | def testFilter(x): return x % 2 #x是否能被2整除 print filter (testFilter, range ( 1 , 10 )) #返回不能被2整除的序列 print filter ( None , range ( 1 , 10 )) #返回整个range(1,10)序列 |
运行结果:
1 2 3 | >>> [ 1 , 3 , 5 , 7 , 9 ] [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] |
2.map(function, sequence) 逐个从sequence中取一个元素传入function,function的每个返回值组成列表作为map函数的返回值
参数function:可以有一个参数,或者多个参数,如果有多个参数,对应的map函数的sequence参数也应该有多个,并且每个sequence的元素个数相同
参数sequence:一个序列(字符串、元组、列表等)
def testMap(x,y): return x+y print map(testMap,range(1,5),range(1,5)) print map(testMap,range(1,5),range(1,3))
运行结果:
>>> [2, 4, 6, 8] Traceback (most recent call last): File "C:/Users/PC/Desktop/pythonstudy/testfff.py", line 11, in <module> print map(testMap,range(1,5),range(1,3)) File "C:/Users/PC/Desktop/pythonstudy/testfff.py", line 9, in testMap return x+y TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
3.reduce(function, sequence) 取sequnce的第一个元素和第二个元素作为初始值传入function,计算后function的返回值和sequnce的下一个元素作为参数传入function进行计算,直到sequence的所有元素计算完成,将最后得到的值作为reduce的返回值
function:两个参数的函数
sequence:一个序列(字符串、元组、列表等)
注:reduce函数还可以有第三个参数,用来初始化第一个用于计算的值
如果sequence只有一个元素,那么reduce将直接返回该值,如果sequence为空,则会引起一个错误
def testReduce(x,y): return x+y print reduce(testReduce,range(10)) #打印range(10)的所有元素相加的值,计算过程:0+1+2+..+9 print reduce(testReduce,range(10),10)#打印10和range(10) 所有元素相加的值,计算过程:10+0+1+2+...+9
运行结果:
>>> 45 55
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?