溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python列表內(nèi)涵實(shí)際中的使用

發(fā)布時(shí)間:2021-09-01 14:32:34 來源:億速云 閱讀:263 作者:chen 欄目:編程語言

這篇文章主要介紹“Python列表內(nèi)涵實(shí)際中的使用”,在日常操作中,相信很多人在Python列表內(nèi)涵實(shí)際中的使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”Python列表內(nèi)涵實(shí)際中的使用”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

Python列表內(nèi)涵(List Comprehensions,也譯作“列表推導(dǎo)式”)是Python***有力的語法之一,常用于從集合對(duì)象中有選擇地獲取并計(jì)算元素,雖然多數(shù)情況下可以使用for、if等語句組合完成同樣的任務(wù),但列表內(nèi)涵書寫的代碼更簡潔(當(dāng)然有時(shí)可能會(huì)不易讀)。

列表內(nèi)涵的一般形式如下,我們可以把[]內(nèi)的列表內(nèi)涵寫為一行,也可以寫為多行(一般來說多行更易讀)。

[表達(dá)式 for item1 in 序列1 ... for itemN in 序列N if 條件表達(dá)式]

上面的表達(dá)式分為三部分,最左邊是生成每個(gè)元素的表達(dá)式,然后是for 迭代過程,最右邊可以設(shè)定一個(gè)if 判斷作為過濾條件。

列表內(nèi)涵的一個(gè)著名例子是生成九九乘法表:

s = [(x, y, x*y) for x in range(1, 10) for y in range(1,10) if x>=y]

列表內(nèi)涵可能放在函數(shù)編程一章更合適,因?yàn)樗梢越y(tǒng)一實(shí)現(xiàn)map和filter等高階函數(shù)(下一章介紹)。不過我還是傾向于將它看為一種組合的流程控制語句,而且我個(gè)人感覺它與C#中的LINQ有點(diǎn)神似(當(dāng)然LINQ更強(qiáng)大,可以處理數(shù)據(jù)庫和XML)。下面是兩個(gè)例子,一個(gè)用LINQ實(shí)現(xiàn),一個(gè)用Python的列表內(nèi)涵實(shí)現(xiàn)。

C#中用LINQ找出10以內(nèi)的偶數(shù)  var s = from x in Enumerable.Range(0, 10) where x % 2 == 0 select x;
#Python中用列表內(nèi)涵模擬以上LINQ語句  s = [x for x in range(0, 10) if x % 2 == 0]

當(dāng)然上邊的例子很簡單,實(shí)際上我們可以用列表內(nèi)涵完成更復(fù)雜的程序設(shè)計(jì)任務(wù),而且效率一般會(huì)比使用for、if等的組合語句高(因?yàn)橹虚g省略了一些列表的生成和賦值過程)。Python 2.5 之后,列表內(nèi)涵進(jìn)行了進(jìn)一步的擴(kuò)展,如果一個(gè)函數(shù)接受一個(gè)可迭代對(duì)象作為參數(shù),那么可以給它傳遞一個(gè)不帶中括號(hào)的列表內(nèi)涵,這樣就不需要一次生成整個(gè)列表,只要將可迭代對(duì)象傳遞給函數(shù)。

動(dòng)態(tài)表達(dá)式

先布置一個(gè)思考題:在C#語言中,如果需要在文本框中輸入1+2(或更復(fù)雜的數(shù)學(xué)表達(dá)式)后計(jì)算它的值,你會(huì)怎么做呢?

不怕大家笑,我在用C#解決這個(gè)問題的時(shí)候,是自己做了一個(gè)表達(dá)式解析器…………,雖然只能計(jì)算加減乘除的簡單組合,但也著實(shí)費(fèi)了我好大力氣。后來才開始使用各種各樣的第三方Parse組件,msscript等?,F(xiàn)在我們有了Python,要完成這個(gè)任務(wù)可以說是非常簡單,簡單到你不敢相信:只要用內(nèi)置的eval()函數(shù),就可以計(jì)算并返回任意有效表達(dá)式的值。例如:

str = '1+2'2 print eval(str)

你還可以試驗(yàn)更復(fù)雜的表達(dá)式,是不是很Powerful的一項(xiàng)功能?

除了eval函數(shù)之外,Python還提供了exec語句將字符串str當(dāng)成有效Python代碼來執(zhí)行,看下面的例子:

#exec.py  exec 'a=100'3 print a

另外還有execfile函數(shù),它用來執(zhí)行一個(gè)外部的py文件。上一個(gè)例子存為exec.py后,運(yùn)行下邊的代碼就知道是怎么回事了:

execfile(r'c:\exec.py')

***提醒,默認(rèn)的eval(),exec,execfile()所運(yùn)行的代碼都位于當(dāng)前的名字空間中,eval(), exec,和execfile()函數(shù)也可以接受一個(gè)或兩個(gè)可選字典參數(shù)作為代碼執(zhí)行的全局名字空間和局部名字空間,具體可以參考Python的手冊(cè),我就不啰嗦了。

到此,關(guān)于“Python列表內(nèi)涵實(shí)際中的使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI