資源描述:
《使用python的列表解析以及函數(shù)式計算來簡化代碼》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、使用python的列表解析以及函數(shù)式計算來簡化代碼在我們的代碼里經(jīng)常會和列表,元組,字典等數(shù)據(jù)結(jié)構(gòu)打交道,可以這么說,在很大程度上我們的代碼就是對這些數(shù)據(jù)結(jié)構(gòu)進行處理的過程,在Python中對列表,元組,字典等內(nèi)置的數(shù)據(jù)結(jié)構(gòu)的處理是很方便的事情,python借鑒了Lisp中的很多函數(shù)式計算的方法來處理列表,可以極大的簡化我們的代碼。set()將元組,列表轉(zhuǎn)化成沒有重復(fù)項的集合list()將集合,元組轉(zhuǎn)化成列表tuple()將集合,列表轉(zhuǎn)化成元組列表解析:[返回值for元素in列表if條件]比如[numfornuminxrange(100)ifnum%
2、2==0]返回0~99之間的偶數(shù)列表map(func,list):將list的每一個元素傳遞給func的函數(shù),這個函數(shù)有一個參數(shù),且返回一個值,map將每一次調(diào)用函數(shù)返回的值組成一個新列表返回filter(func,list):將list的每一個元素傳遞給func的函數(shù),這個函數(shù)有一個參數(shù),返回bool類型的值,filter將返回True的元素組成新列表返回reduce(func,list):將list的元素,挨個取出來和下一個元素通過func計算后將結(jié)果和再下一個元素繼續(xù)計算,比如ls=[1,3,5,7]reduce(lambdax,y:x+y,l
3、s)的計算過程就是1+3=4然后4+5得到結(jié)果9,再加7,以此類推,最后返回最終計算的結(jié)果下面我們用實際的例子來看如何運用這幾個函數(shù)1.列表去重如果有一個列表ls=[1,3,2,5,2,1,3,4,6]需要去掉其中重復(fù)的項,怎么做?最簡單的辦法?ls=list(set(ls))2.假如有列表:books=[?????{"name":"C#從入門到精通","price":23.7,"store":"卓越"},?????{"name":"ASP.NET高級編程","price":44.5,"store":"卓越"},?????{"name":"C#從入門
4、到精通","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([bforbinbooksifb['name']=="ASP.NET高級編程"
5、],key=lambdab:b.price)["store"]過程:先用列表解析取出《ASP.NET高級編程》的列表,通過min函數(shù),比較字典的price鍵獲取price最小的項2.2求在新華書店購買兩本書一樣一本要花的錢:price=sum([b['price']forbinbooksifb['store']=="新華書店"])2.3求列表中有那幾本書:booknames=list(set([b['name']forbinbooks]))2.4列表里當當?shù)臅即?折:books=map(lambdab:dict(name=b['name'],pri
6、ce=b['price']*0.5,store=b['store']),books)2.5《C#從入門到精通》的平均價格:avg=(lambdals:sum(ls)/len(ls))([b.priceforbinbooksifb['name']=="C#從入門到精通"])2.6求每本書的平均價格:book_avg=map(lambdabookname:dict(name=bookname,avg=(lambdals:sum(ls)/len(ls))([b.priceforbinbooksifb['name']==bookname])),list(se
7、t([b['name']forbinbooks])))這段代碼放在一行比較難看懂,但是格式化一下就很好懂了,構(gòu)建的過程如下:step1要求每本書的平均價格,首先要得到共有幾本書,方法見2.3,得到去重的書名列表list(set([b['name']forbinbooks]))#去重后的書名列表step2要求每一本書的均價,需要將計算均價的函數(shù)映射到每一本書上,于是map(???#計算均價的函數(shù),???list(set([b['name']forbinbooks]))#去重后的書名列表)step3加入計算單本書均價的函數(shù),參考2.5的方法,由于只用一行
8、,所以用lambda來搞定:func=lambdabookname:(lambdals:sum(ls)/le