中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

python列表推導(dǎo)式(16)

截止到目前為止,python基礎(chǔ)內(nèi)容已經(jīng)學(xué)習(xí)了50%左右,在學(xué)習(xí)編程過(guò)程中,我們不僅要學(xué)習(xí)python語(yǔ)法,同時(shí)也需要學(xué)習(xí)如何把自己代碼寫的更美觀,效率更高。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、重慶小程序開(kāi)發(fā)公司、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了南澳免費(fèi)建站歡迎大家使用!

?

一.什么是推導(dǎo)式

推導(dǎo)式是從一個(gè)或者多個(gè)迭代器快速簡(jiǎn)潔地創(chuàng)建數(shù)據(jù)類型的一種方法,它將循環(huán)和條件判斷結(jié)合,從而避免語(yǔ)法冗長(zhǎng)的代碼,提高代碼運(yùn)行效率。能熟練使用推導(dǎo)式也可以間接說(shuō)明你已經(jīng)超越了python初學(xué)者的水平。

python列表推導(dǎo)式(16)

?

二.條件推導(dǎo)式

1.語(yǔ)法

1

2

3

4

5

6

7

8

'''

value1:如果條件表達(dá)式condition成立,返回value1 ; 如果條件表達(dá)式不成立,返回value2 ;

condition:條件表達(dá)式

Value2:如果條件表達(dá)式condition成立,返回value1 ; 如果條件表達(dá)式不成立,返回value2 ;

?

'''

?

value1ifconditionelseValue2

?

2.實(shí)戰(zhàn)練習(xí)

假如有這樣一個(gè)需要:判斷一個(gè)數(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(個(gè)人博客地址): shuopython.com

@WeChat Official Account(微信公眾號(hào)):猿說(shuō)python

@Github:www.github.com

?

@File:python_list.py

@Time:2019/9/30 20:45

?

@Motto:不積跬步無(wú)以至千里,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累!

"""

?

?

# 新手代碼

x=10

ifx%2==0:

????print("新手說(shuō):x是偶數(shù)")

else:

????print("新手說(shuō):x是奇數(shù)")

?

# 老司機(jī)

x=15

print("老司機(jī)說(shuō):x是偶數(shù)")ifx%2==0elseprint("老司機(jī)說(shuō):x是奇數(shù)")

輸出結(jié)果:

1

2

新手說(shuō):x是偶數(shù)

老司機(jī)說(shuō):x是奇數(shù)

觀察上面代碼可以看出來(lái),選手一(新手)一共占用了5行代碼,而選手二(老司機(jī))完成同樣一個(gè)功能僅僅只需要兩行,這就是性價(jià)比,往往這就是職場(chǎng)上鑒別工作能力/升職加薪的細(xì)節(jié)。

?

三.列表推導(dǎo)式

列表推導(dǎo)式是條件推導(dǎo)式和循環(huán)一起配合使用,并返回一個(gè)列表,并且整個(gè)表達(dá)式需要在[]內(nèi),因?yàn)榉祷刂狄彩橇斜怼?/p>

1.語(yǔ)法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

'''

語(yǔ)法一:

????exp1:在for循環(huán)中,如果x的值滿足條件表達(dá)式condition(即條件表達(dá)式成立),返回exp1;條件表達(dá)式不成立則不返回

????x:for循環(huán)中變量

????data:一個(gè)序列(比如:列表/元組/字符串等)

????condition:條件表達(dá)式

'''

?

[exp1forxindataifcondition]

?

'''

語(yǔ)法二:

????exp1:在for循環(huán)中,如果x的值滿足條件表達(dá)式condition(即條件表達(dá)式成立),返回exp1;條件表達(dá)式不成立則返回exp2

????condition:條件表達(dá)式

????exp2:在for循環(huán)中,如果x的值滿足條件表達(dá)式condition(即條件表達(dá)式成立),返回exp1;條件表達(dá)式不成立則返回exp2

????x:for循環(huán)中變量

????data:個(gè)序列(比如:列表/元組/字符串等)

????

'''

?

[exp1ifconditionelseexp2forxindata]

?

2.實(shí)戰(zhàn)練習(xí)

需求一:獲取0~20的所有偶數(shù)并且乘以10,并返回所有計(jì)算之后的結(jié)果。示例代碼如下:(使用列表推導(dǎo)式語(yǔ)法一實(shí)現(xiàn))

1

2

3

4

5

6

7

8

9

10

'''

1.因?yàn)槭谦@取0~20,包括20,所以使用range(0,21)

2.x*10 等價(jià) 語(yǔ)法一中的exp1

3.x%2 == 0 等價(jià) 語(yǔ)法一中的條件表達(dá)式condition

4.range(0,21) 等價(jià) 語(yǔ)法一中的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,并返回所有計(jì)算之后的結(jié)果。示例代碼如下:(使用列表推導(dǎo)式語(yǔ)法二實(shí)現(xiàn))

1

2

3

4

5

6

7

8

9

10

11

'''

1.因?yàn)槭谦@取0~20,包括20,所以使用range(0,21)

2.x*10 等價(jià) 語(yǔ)法二中的exp1

3.x*100 等價(jià) 語(yǔ)法二中的exp2

4.x%2 == 0 等價(jià) 語(yǔ)法二中的條件表達(dá)式condition

5.range(0,21) 等價(jià) 語(yǔ)法一中的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'>

?

3.效率對(duì)比

可能有童鞋納悶,我明明for循環(huán)就能實(shí)現(xiàn)的功能,為毛要用這鳥(niǎo)玩意推導(dǎo)式?

使用列表推導(dǎo)式的效率遠(yuǎn)遠(yuǎn)高于for循環(huán),可能執(zhí)行一句print(“helloworld”)對(duì)于cpu而已只需要0.0002秒,你可能感覺(jué)不到差距,如果需要輸出一億次helloworld呢?往往細(xì)節(jié)覺(jué)得成??!

假如有一個(gè)需求:將0~10000000(一億)以內(nèi)的所有整數(shù)存到列表中,對(duì)比一下列表推導(dǎo)式和for循環(huán)耗時(shí)情況:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

importtime# 添加time模塊,用于統(tǒng)計(jì)代碼運(yùn)行時(shí)間

?

#一共添加10000000次數(shù)據(jù)到列表中

total_num=10000000

?

#使用列表推導(dǎo)式

start_time=time.time()

list1=[xforxinrange(0,total_num)]# 列表推導(dǎo)式

end_time=time.time()

print("使用列表推導(dǎo)式耗時(shí):{}秒".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)耗時(shí):{}秒".format(end_time-start_time))

輸出結(jié)果:

1

2

使用列表推導(dǎo)式耗時(shí):0.5455152988433838秒

使用普通for循環(huán)耗時(shí):1.2068836688995361秒

輸出結(jié)果很明顯,實(shí)現(xiàn)通用的功能,列表推導(dǎo)式的效率整整高出普通for循環(huán)一倍。

python列表推導(dǎo)式(16)

?

最后溫馨提醒:測(cè)試請(qǐng)把循環(huán)次數(shù)改小一點(diǎn),畢竟剛開(kāi)始不小心多加了幾圈圈,電腦死機(jī)了!

?

四.重點(diǎn)總結(jié)

1.注意在列表推導(dǎo)式書(shū)寫的時(shí)候,所有表達(dá)式都必須在[]內(nèi)部,因?yàn)榉祷刂凳橇斜韑ist

2.列表推導(dǎo)式是python開(kāi)發(fā)學(xué)習(xí)的知識(shí)點(diǎn),多多聯(lián)系,熟能生巧.

?

本文名稱:python列表推導(dǎo)式(16)
本文路徑:http://www.rwnh.cn/article2/gsphoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、品牌網(wǎng)站設(shè)計(jì)定制開(kāi)發(fā)、自適應(yīng)網(wǎng)站、Google小程序開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
绥中县| 天全县| 南康市| 宁德市| 晴隆县| 通城县| 五家渠市| 从江县| 玉环县| 武冈市| 修水县| 白山市| 修水县| 五大连池市| 成武县| 石景山区| 东明县| 浮梁县| 南昌市| 仁怀市| 普定县| 吉木乃县| 两当县| 山东省| 怀集县| 泰安市| 合肥市| 辽源市| 北碚区| 深水埗区| 略阳县| 唐海县| 奉新县| 临夏市| 松溪县| 扶风县| 广南县| 新乡县| 临武县| 孝昌县| 长岭县|