使用python的列表解析以及函数式计算来简化代码.docx_第1页
使用python的列表解析以及函数式计算来简化代码.docx_第2页
使用python的列表解析以及函数式计算来简化代码.docx_第3页
使用python的列表解析以及函数式计算来简化代码.docx_第4页
使用python的列表解析以及函数式计算来简化代码.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

使用python的列表解析以及函数式计算来简化代码在我们的代码里经常会和列表,元组,字典等数据结构打交道,可以这么说,在很大程度上我们的代码就是对这些数据结构进行处理的过程,在Python中对列表,元组,字典等内置的数据结构的处理是很方便的事情,python借鉴了Lisp中的很多函数式计算的方法来处理列表,可以极大的简化我们的代码。set() 将元组,列表 转化成没有重复项的集合list()将集合,元组转化成列表tuple()将集合,列表转化成元组列表解析:返回值 for 元素 in 列表 if 条件 比如 num for num in xrange(100) if num%2=0 返回099之间的偶数列表map(func,list):将list的每一个元素传递给func的函数,这个函数有一个参数,且返回一个值,map将每一次调用函数返回的值组成一个新列表返回filter(func,list):将list的每一个元素传递给func的函数,这个函数有一个参数,返回bool类型的值,filter将返回True的元素组成新列表返回reduce(func,list):将list的元素,挨个取出来和下一个元素通过func计算后将结果和再下一个元素继续计算,比如ls=1,3,5,7reduce(lambda x,y:x+y,ls)的计算过程就是 1+3=4 然后4+5得到结果9,再加7,以此类推,最后返回最终计算的结果下面我们用实际的例子来看如何运用这几个函数1.列表去重如果有一个列表ls=1,3,2,5,2,1,3,4,6需要去掉其中重复的项,怎么做?最简单的办法 ls=list(set(ls)2.假如有列表:books= name:C#从入门到精通,price:23.7,store:卓越, name:ASP.NET高级编程,price:44.5,store:卓越, name:C#从入门到精通,price:24.7,store:当当, name:ASP.NET高级编程,price:45.7,store:当当, name:C#从入门到精通,price:26.7,store:新华书店, name:ASP.NET高级编程,price:55.7,store:新华书店, 2.1 求ASP.NET高级编程价格最便宜的店:storename=min(b for b in books if bname=ASP.NET高级编程,key=lambda b:b.price)store过程:先用列表解析取出ASP.NET高级编程的列表,通过min函数,比较字典的price键获取price最小的项2.2 求在新华书店购买两本书一样一本要花的钱:price=sum(bprice for b in books if bstore=新华书店)2.3 求列表中有那几本书:booknames=list(set(bname for b in books)2.4 列表里当当的书都打5折:books=map(lambda b:dict(name=bname,price=bprice*0.5,store=bstore),books)2.5 C#从入门到精通的平均价格:avg=(lambda ls:sum(ls)/len(ls)(b.price for b in books if bname=C#从入门到精通)2.6 求每本书的平均价格:book_avg=map(lambda bookname:dict(name=bookname,avg=(lambda ls:sum(ls)/len(ls)(b.price for b in books if bname=bookname),list(set(bname for b in books)这段代码放在一行比较难看懂,但是格式化一下就很好懂了,构建的过程如下:step1 要求每本书的平均价格,首先要得到共有几本书,方法见2.3,得到去重的书名列表list(set(bname for b in books) #去重后的书名列表step2 要求每一本书的均价,需要将计算均价的函数映射到每一本书上,于是map( #计算均价的函数, list(set(bname for b in books) #去重后的书名列表)step3 加入计算单本书均价的函数,参考2.5的方法,由于只用一行,所以用lambda来搞定:func=lambda bookname:(lambda ls:sum(ls)/len(ls)(b.price for b in books if bname=bookname)step4 将计算单本均价的lambda函数加入map中,得到最终结果:经过格式化后的结果,前面的单行代码可以格式化为下面容易阅读的形式map( lambda bookname:reduce( lambda bookname:dict(name=bookname,avg=(lambda ls:sum(ls)/len(ls)(b.price for b in books if bname=bookname), list( set( bname for b in b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论