截止到目前為止,python基礎(chǔ)內(nèi)容已經(jīng)學習了50%左右,在學習編程過程中,我們不僅要學習python語法,同時也需要學習如何把自己代碼寫的更美觀,效率更高。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)公司、集團企業(yè)網(wǎng)站建設(shè)等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了南澳免費建站歡迎大家使用!
?
推導式是從一個或者多個迭代器快速簡潔地創(chuàng)建數(shù)據(jù)類型的一種方法,它將循環(huán)和條件判斷結(jié)合,從而避免語法冗長的代碼,提高代碼運行效率。能熟練使用推導式也可以間接說明你已經(jīng)超越了python初學者的水平。

?
1 2 3 4 5 6 7 8 | ''' value1:如果條件表達式condition成立,返回value1 ; 如果條件表達式不成立,返回value2 ; condition:條件表達式 Value2:如果條件表達式condition成立,返回value1 ; 如果條件表達式不成立,返回value2 ; ? ''' ? value1ifconditionelseValue2 |
?
假如有這樣一個需要:判斷一個數(shù)字是奇數(shù)還是偶數(shù)?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解憂 @Blog(個人博客地址): shuopython.com @WeChat Official Account(微信公眾號):猿說python @Github:www.github.com ? @File:python_list.py @Time:2019/9/30 20:45 ? @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! """ ? ? # 新手代碼 x=10 ifx%2==0: ????print("新手說:x是偶數(shù)") else: ????print("新手說:x是奇數(shù)") ? # 老司機 x=15 print("老司機說:x是偶數(shù)")ifx%2==0elseprint("老司機說:x是奇數(shù)") |
輸出結(jié)果:
1 2 | 新手說:x是偶數(shù) 老司機說:x是奇數(shù) |
觀察上面代碼可以看出來,選手一(新手)一共占用了5行代碼,而選手二(老司機)完成同樣一個功能僅僅只需要兩行,這就是性價比,往往這就是職場上鑒別工作能力/升職加薪的細節(jié)。
?
列表推導式是條件推導式和循環(huán)一起配合使用,并返回一個列表,并且整個表達式需要在[]內(nèi),因為返回值也是列表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ''' 語法一: ????exp1:在for循環(huán)中,如果x的值滿足條件表達式condition(即條件表達式成立),返回exp1;條件表達式不成立則不返回 ????x:for循環(huán)中變量 ????data:一個序列(比如:列表/元組/字符串等) ????condition:條件表達式 ''' ? [exp1forxindataifcondition] ? ''' 語法二: ????exp1:在for循環(huán)中,如果x的值滿足條件表達式condition(即條件表達式成立),返回exp1;條件表達式不成立則返回exp2 ????condition:條件表達式 ????exp2:在for循環(huán)中,如果x的值滿足條件表達式condition(即條件表達式成立),返回exp1;條件表達式不成立則返回exp2 ????x:for循環(huán)中變量 ????data:個序列(比如:列表/元組/字符串等) ???? ''' ? [exp1ifconditionelseexp2forxindata] |
?
需求一:獲取0~20的所有偶數(shù)并且乘以10,并返回所有計算之后的結(jié)果。示例代碼如下:(使用列表推導式語法一實現(xiàn))
1 2 3 4 5 6 7 8 9 10 | ''' 1.因為是獲取0~20,包括20,所以使用range(0,21) 2.x*10 等價 語法一中的exp1 3.x%2 == 0 等價 語法一中的條件表達式condition 4.range(0,21) 等價 語法一中的data(序列) ''' ? list1=[x*10forxinrange(0,21)ifx%2==0] print(list1) print(type(list1)) |
輸出結(jié)果:
1 2 | [0,20,40,60,80,100,120,140,160,180,200] <class'list'> |
?
需求二:將0~20的偶數(shù)乘以10,奇數(shù)乘以100,并返回所有計算之后的結(jié)果。示例代碼如下:(使用列表推導式語法二實現(xiàn))
1 2 3 4 5 6 7 8 9 10 11 | ''' 1.因為是獲取0~20,包括20,所以使用range(0,21) 2.x*10 等價 語法二中的exp1 3.x*100 等價 語法二中的exp2 4.x%2 == 0 等價 語法二中的條件表達式condition 5.range(0,21) 等價 語法一中的data(序列) ''' ? list2=[x*10ifx%2==0elsex*100forxinrange(0,21)] print(list2) print(type(list2)) |
輸出結(jié)果:
1 2 | [0,100,20,300,40,500,60,700,80,900,100,1100,120,1300,140,1500,160,1700,180,1900,200] <class'list'> |
?
可能有童鞋納悶,我明明for循環(huán)就能實現(xiàn)的功能,為毛要用這鳥玩意推導式?
使用列表推導式的效率遠遠高于for循環(huán),可能執(zhí)行一句print(“helloworld”)對于cpu而已只需要0.0002秒,你可能感覺不到差距,如果需要輸出一億次helloworld呢?往往細節(jié)覺得成敗!
假如有一個需求:將0~10000000(一億)以內(nèi)的所有整數(shù)存到列表中,對比一下列表推導式和for循環(huán)耗時情況:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | importtime# 添加time模塊,用于統(tǒng)計代碼運行時間 ? #一共添加10000000次數(shù)據(jù)到列表中 total_num=10000000 ? #使用列表推導式 start_time=time.time() list1=[xforxinrange(0,total_num)]# 列表推導式 end_time=time.time() print("使用列表推導式耗時:{}秒".format(end_time-start_time)) ? #使用普通for循環(huán) start_time=time.time() list2=list() forxinrange(0,total_num):# for循環(huán) ????list2.append(x) end_time=time.time() print("使用普通for循環(huán)耗時:{}秒".format(end_time-start_time)) |
輸出結(jié)果:
1 2 | 使用列表推導式耗時:0.5455152988433838秒 使用普通for循環(huán)耗時:1.2068836688995361秒 |
輸出結(jié)果很明顯,實現(xiàn)通用的功能,列表推導式的效率整整高出普通for循環(huán)一倍。

?
最后溫馨提醒:測試請把循環(huán)次數(shù)改小一點,畢竟剛開始不小心多加了幾圈圈,電腦死機了!
?
1.注意在列表推導式書寫的時候,所有表達式都必須在[]內(nèi)部,因為返回值是列表list
2.列表推導式是python開發(fā)學習的知識點,多多聯(lián)系,熟能生巧.
?
本文名稱:python列表推導式(16)
本文路徑:http://www.chinadenli.net/article2/gsphoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航、品牌網(wǎng)站設(shè)計、定制開發(fā)、自適應網(wǎng)站、Google、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)