python列表推導(dǎo)式入門(mén)學(xué)習(xí)解析
這篇文章主要介紹了python列表推導(dǎo)式入門(mén)學(xué)習(xí)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
一.什么是推導(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é)者的水平。
報(bào)錯(cuò)
二.條件推導(dǎo)式
1.語(yǔ)法
''' value1:如果條件表達(dá)式condition成立,返回value1 ; 如果條件表達(dá)式不成立,返回value2 ; condition:條件表達(dá)式 Value2:如果條件表達(dá)式condition成立,返回value1 ; 如果條件表達(dá)式不成立,返回value2 ; ''' value1 if condition else Value2
2.實(shí)戰(zhàn)練習(xí)
假如有這樣一個(gè)需要:判斷一個(gè)數(shù)字是奇數(shù)還是偶數(shù)?
# !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 if x%2 == 0: print("新手說(shuō):x是偶數(shù)") else: print("新手說(shuō):x是奇數(shù)") # 老司機(jī) x = 15 print("老司機(jī)說(shuō):x是偶數(shù)") if x%2 == 0 else print("老司機(jī)說(shuō):x是奇數(shù)")
輸出結(jié)果:
新手說(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ǔ)法
''' 語(yǔ)法一: exp1:在for循環(huán)中,如果x的值滿足條件表達(dá)式condition(即條件表達(dá)式成立),返回exp1;條件表達(dá)式不成立則不返回 x:for循環(huán)中變量 data:一個(gè)序列(比如:列表/元組/字符串等) condition:條件表達(dá)式 ''' [exp1 for x in data if condition] ''' 語(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è)序列(比如:列表/元組/字符串等) ''' [exp1 if condition else exp2 for x in data]
2.實(shí)戰(zhàn)練習(xí)
需求一:獲取0~20的所有偶數(shù)并且乘以10,并返回所有計(jì)算之后的結(jié)果。示例代碼如下:(使用列表推導(dǎo)式語(yǔ)法一實(shí)現(xiàn))
''' 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*10 for x in range(0,21) if x%2 == 0] print(list1) print(type(list1))
輸出結(jié)果:
[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.因?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*10 if x%2 == 0 else x*100 for x in range(0,21) ] print(list2) print(type(list2))
輸出結(jié)果:
[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í)情況:
import time # 添加time模塊,用于統(tǒng)計(jì)代碼運(yùn)行時(shí)間 #一共添加10000000次數(shù)據(jù)到列表中 total_num = 10000000 #使用列表推導(dǎo)式 start_time = time.time() list1 = [x for x in range(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() for x in range(0,total_num): # for循環(huán) list2.append(x) end_time = time.time() print("使用普通for循環(huán)耗時(shí):{}秒".format(end_time-start_time))
輸出結(jié)果:
使用列表推導(dǎo)式耗時(shí):0.5455152988433838秒
使用普通for循環(huán)耗時(shí):1.2068836688995361秒
輸出結(jié)果很明顯,實(shí)現(xiàn)通用的功能,列表推導(dǎo)式的效率整整高出普通for循環(huán)一倍。
最后溫馨提醒:測(cè)試請(qǐng)把循環(huán)次數(shù)改小一點(diǎn),畢竟剛開(kāi)始不小心多加了幾圈圈,電腦死機(jī)了!
四.重點(diǎn)總結(jié)
1.注意在列表推導(dǎo)式書(shū)寫(xiě)的時(shí)候,所有表達(dá)式都必須在[]內(nèi)部,因?yàn)榉祷刂凳橇斜韑ist
2.列表推導(dǎo)式是python開(kāi)發(fā)學(xué)習(xí)的知識(shí)點(diǎn),多多聯(lián)系,熟能生巧.
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python之列表推導(dǎo)式最全匯總(上篇)
- Python之列表推導(dǎo)式最全匯總(中篇)
- python中列表推導(dǎo)式與生成器表達(dá)式對(duì)比詳解
- Python列表推導(dǎo)式,元組推導(dǎo)式,字典推導(dǎo)式,集合推導(dǎo)式
- Python的列表推導(dǎo)式你了解嗎
- python列表推導(dǎo)式的原理及使用方法
- python列表推導(dǎo)式實(shí)現(xiàn)找出列表中長(zhǎng)度大于5的名字
- Python 列表推導(dǎo)式與字典推導(dǎo)式的實(shí)現(xiàn)
- Python列表推導(dǎo)式詳情
- python列表推導(dǎo)式 經(jīng)典代碼
- Python 列表推導(dǎo)式需要注意的地方
- Python列表推導(dǎo)式實(shí)現(xiàn)代碼實(shí)例
- 什么是python的列表推導(dǎo)式
- python之列表推導(dǎo)式的用法
- python列表推導(dǎo)式操作解析
- python 列表推導(dǎo)式使用詳解
- 簡(jiǎn)單了解python 生成器 列表推導(dǎo)式 生成器表達(dá)式
- Python之列表推導(dǎo)式最全匯總(下篇)
相關(guān)文章
在python中使用pyspark讀寫(xiě)Hive數(shù)據(jù)操作
這篇文章主要介紹了在python中使用pyspark讀寫(xiě)Hive數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06Python?for循環(huán)詳細(xì)講解(附代碼實(shí)例)
這篇文章主要給大家介紹了關(guān)于Python?for循環(huán)詳細(xì)講解的相關(guān)資料,在Python中,for循環(huán)是一種常用的控制結(jié)構(gòu),用于遍歷序列(如列表、元組、字符串等)中的元素,需要的朋友可以參考下2024-03-03Python學(xué)習(xí)之隨機(jī)模塊random詳解
本文我們將學(xué)習(xí)一下Python中非常簡(jiǎn)單但也非常有用的模塊—random ,此模塊主要用于生成隨機(jī)數(shù),接下來(lái)就讓我們了解一下random模塊中最常見(jiàn)的幾種方法吧2022-03-03pytest生成簡(jiǎn)單自定義測(cè)試結(jié)果的html報(bào)告
這篇文章主要為大家介紹了pytest生成簡(jiǎn)單自定義測(cè)試結(jié)果html報(bào)告,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06基于python的socket實(shí)現(xiàn)單機(jī)五子棋到雙人對(duì)戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了基于python的socket實(shí)現(xiàn)單機(jī)五子棋到雙人對(duì)戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Django-Rest-Framework 權(quán)限管理源碼淺析(小結(jié))
這篇文章主要介紹了Django-Rest-Framework 權(quán)限管理源碼淺析(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11