一、列表解析
列表解析是由方括號(hào)括起來(lái)的(為了提醒你它們構(gòu)造了一個(gè)列表)。在方括號(hào)中編寫一個(gè)表達(dá)式(x + 10),該表達(dá)式使用后面 for 循環(huán)產(chǎn)生的變量(x)進(jìn)行運(yùn)算 ,后邊跟著一個(gè)for 循環(huán)頭部的部分,它聲明了循環(huán)變量(x),以及一個(gè)可迭代對(duì)象 (L)。Python 之后將這個(gè)表達(dá)式每次運(yùn)算的結(jié)果收集起來(lái)并返回一個(gè)新的列表。從技術(shù)上講,列表解析并非真的是必需的,因?yàn)槲覀兛偸强梢酝ㄟ^(guò)一個(gè) for 循環(huán)手動(dòng)的構(gòu)建一個(gè)新的列表。但是,列表解析編寫起來(lái)更加精簡(jiǎn),此外列表解析比手動(dòng)的 for 循環(huán)語(yǔ)句運(yùn)行的更快(往往速度會(huì)快一倍),因?yàn)樗鼈兊牡诮忉屍鲀?nèi)部是以C語(yǔ)言的速度執(zhí)行的,而不是以 Python 代碼執(zhí)行。特別是對(duì)于較大的數(shù)據(jù)集合,使用列表解析會(huì)有更好的性能。
1、for 循環(huán)、map() 調(diào)用和列表解析
map() 把一個(gè)函數(shù)映射遍一個(gè)序列,列表解析把一個(gè)表達(dá)式映射遍一個(gè)序列。
對(duì)于大部分情況來(lái)講,map() 調(diào)用比等效的 for 循環(huán)要快兩倍,而列表解析往往比map()調(diào)用要稍快一些。速度上的差距是來(lái)自于底層實(shí)現(xiàn)上,map() 和列表解析是在解釋器中以C語(yǔ)言的速度來(lái)運(yùn)行的,比Python的 for 循環(huán)代碼在 PVM 中步進(jìn)運(yùn)行要快很多。而且因?yàn)?map() 和 列表解析都是表達(dá)式,從語(yǔ)法上來(lái)說(shuō),它們能夠在 for 循環(huán)語(yǔ)句不能出現(xiàn)的地方使用。
因?yàn)?for 循環(huán)讓邏輯變得清晰,基于簡(jiǎn)單性我們通常推薦使用。盡管如此,如果應(yīng)用對(duì)于速度特別重視的話,map() 和列表解析作為一種簡(jiǎn)單的迭代是很容易理解和使用的。
2、在文件上使用列表解析
文件對(duì)象有一個(gè) readlines() 方法,它能一次性的把文件載入到行字符串的一個(gè)列表中。3、擴(kuò)展的列表解析語(yǔ)法
可以在表達(dá)式嵌套的 for 循環(huán)之后編寫一個(gè) if 子句,用來(lái)增加選擇邏輯,從而過(guò)濾那些測(cè)試不為真的結(jié)果項(xiàng)。實(shí)際上在列表解析可以編寫任意數(shù)量的嵌套的 for循環(huán),每一個(gè)子句有一個(gè)可選的相關(guān)的if子句。 當(dāng) for 語(yǔ)句嵌套在列表解析中時(shí),它們工作起來(lái)就像等效的嵌套的 for 循環(huán)語(yǔ)句。
例如,下面將兩個(gè)列表拼接成一個(gè)列表。4、列表解析和矩陣
使用 Python 編寫矩陣(也被成為多維數(shù)組)的一個(gè)基本的方法就是使用嵌套的列表結(jié)構(gòu)。列表解析這里只需要一行代碼,而且可能對(duì)于大型矩陣來(lái)說(shuō),運(yùn)行相當(dāng)快。
二、集合解析和字典解析
1、集合解析和字典解析
集合解析: {f(x) for x in s if p(x)}
字典解析: {key:val for (key, val) in zip(keys, vals)}
注意:是沒(méi)有元組解析的,我們可能會(huì)類推出元組解析的語(yǔ)法, 但是那是生成器表達(dá)式,會(huì)返回一個(gè)生成器對(duì)象,而不是元組,對(duì)應(yīng)的概念我們會(huì)在后期的章節(jié)中詳細(xì)介紹。
2、擴(kuò)展的解析語(yǔ)法
集合和字典解析都支持嵌套相關(guān)額if子句從結(jié)果中過(guò)濾掉元素。《Python基礎(chǔ)手冊(cè)》系列:
Python基礎(chǔ)手冊(cè) 1 —— Python語(yǔ)言介紹
Python基礎(chǔ)手冊(cè) 2 —— Python 環(huán)境搭建(Linux)
Python基礎(chǔ)手冊(cè) 3 —— Python解釋器
Python基礎(chǔ)手冊(cè) 4 —— 文本結(jié)構(gòu)
Python基礎(chǔ)手冊(cè) 5 —— 標(biāo)識(shí)符和關(guān)鍵字
Python基礎(chǔ)手冊(cè) 6 —— 操作符
Python基礎(chǔ)手冊(cè) 7 —— 內(nèi)建函數(shù)
Python基礎(chǔ)手冊(cè) 8 —— Python對(duì)象
Python基礎(chǔ)手冊(cè) 9 —— 數(shù)字類型
Python基礎(chǔ)手冊(cè)10 —— 序列(字符串)
Python基礎(chǔ)手冊(cè)11 —— 序列(元組&列表)
Python基礎(chǔ)手冊(cè)12 —— 序列(類型操作)
Python基礎(chǔ)手冊(cè)13 —— 映射(字典)
Python基礎(chǔ)手冊(cè)14 —— 集合
Python基礎(chǔ)手冊(cè)15 —— 解析
Python基礎(chǔ)手冊(cè)16 —— 文件
Python基礎(chǔ)手冊(cè)17 —— 簡(jiǎn)單語(yǔ)句
Python基礎(chǔ)手冊(cè)18 —— 復(fù)合語(yǔ)句(流程控制語(yǔ)句)
Python基礎(chǔ)手冊(cè)19 —— 迭代器
Python基礎(chǔ)手冊(cè)20 —— 生成器
Python基礎(chǔ)手冊(cè)21 —— 函數(shù)的定義
Python基礎(chǔ)手冊(cè)22 —— 函數(shù)的參數(shù)
Python基礎(chǔ)手冊(cè)23 —— 函數(shù)的調(diào)用
Python基礎(chǔ)手冊(cè)24 —— 函數(shù)中變量的作用域
Python基礎(chǔ)手冊(cè)25 —— 裝飾器
Python基礎(chǔ)手冊(cè)26 —— 錯(cuò)誤 & 異常
Python基礎(chǔ)手冊(cè)27 —— 模塊
Python基礎(chǔ)手冊(cè)28 —— 模塊的高級(jí)概念
Python基礎(chǔ)手冊(cè)29 —— 包