Python 推導(dǎo)表達(dá)式的幾種方法實(shí)現(xiàn)
推導(dǎo)表達(dá)式(也稱為解析語(yǔ)法)是Python中一種遍歷序列并創(chuàng)建指定類型對(duì)象的方法,相對(duì)于使用for循環(huán)遍歷,推導(dǎo)表達(dá)式在語(yǔ)法上更加簡(jiǎn)潔。常用的推導(dǎo)表達(dá)式有:列表表達(dá)式、生成器表達(dá)式、字典表達(dá)式、集合表達(dá)式等。
一、列表表達(dá)式
列表表達(dá)式是一種通過遍歷序列構(gòu)造列表對(duì)象的方法。
語(yǔ)法是在中括號(hào)中一個(gè)表達(dá)式緊跟著1或多個(gè)for語(yǔ)句,以及0或多個(gè)if子句。Python會(huì)將表達(dá)式在for語(yǔ)句中依次循環(huán),并應(yīng)用if語(yǔ)句過濾(如果有的話),最后將結(jié)果按順序填充到列表中。
例如將range(10)中偶數(shù)的平方添加到列表中,常規(guī)for循環(huán)代碼如下:
l = [] for v in range(10): if v%2 == 0: l.append(v**2)
下面是等價(jià)的列表表達(dá)式,依次將表達(dá)式、for語(yǔ)句、if語(yǔ)句寫在方括號(hào)中即可,相對(duì)于上面的代碼更加簡(jiǎn)潔:
l = [v**2 for v in range(10) if v%2==0]
如遇到嵌套循環(huán),只需要在表達(dá)式中按順序編寫for語(yǔ)句和if語(yǔ)句即可。在下面由元組組成的列表中,找出長(zhǎng)度為4的元組,并將其中的偶數(shù)元素的平方添加到列表中,常規(guī)代碼如下:
lt = [(0,1,2), (3,4,5,6), (7,8,9)] l = [] for t in lt: if len(t) == 4: for v in t: if v%2 == 0: l.append(v**2)
換成列表表達(dá)式,只需按多層嵌套的順序依次填寫for和if子句即可:
l = [v**2 for t in lt for v in t if len(t)==4 if v%2==0]
結(jié)果相同,但代碼量少了許多,如果有更多的嵌套,只需要按順序添加即可。
二、生成器表達(dá)式
生成器表達(dá)式的語(yǔ)法和列表表達(dá)式幾乎相同,只是括號(hào)由中括號(hào)換成小括號(hào),這一變化的結(jié)果是返回對(duì)象不再是一個(gè)列表,而是一個(gè)生成器,你可以根據(jù)需要手動(dòng)迭代取出結(jié)果。由于它不會(huì)像列表表達(dá)式那樣一次性生成所有的結(jié)果,因此在處理大對(duì)象時(shí)生成器表達(dá)式相比列表表達(dá)式則更節(jié)約內(nèi)存。
將列表表達(dá)式中的中括號(hào)替換為小括號(hào),即是生成器表達(dá)式:
g = (v**2 for v in range(10) if v%2==0)
可以用next函數(shù)或for循環(huán)取出結(jié)果:
next(g) next(g) for v in g: print(v)
這里用next方法手動(dòng)取出2個(gè)元素,然后用for循環(huán)取出剩下元素。
注意生成器對(duì)象完成一次迭代后就消耗掉了,再次嘗試獲取值時(shí)會(huì)得到StopIteration異常:
next(g)
三、集合表達(dá)式
集合表達(dá)式和列表表達(dá)式的區(qū)別也是括號(hào)不同,集合表達(dá)式用花括號(hào)包圍,最后得到的結(jié)果是一個(gè)集合,注意空的{}創(chuàng)建的不是集合而是字典。
只需要將列表表達(dá)式的[]替換為{}即變成集合表達(dá)式,對(duì)比下面列表表達(dá)式和集合表達(dá)式,注意集合會(huì)自動(dòng)去重:
[v%3 for v in range(10)] {v%3 for v in range(10)}
四、字典表達(dá)式
字典表達(dá)式也是由花括號(hào)包圍,表達(dá)式部分需要由冒號(hào)分隔的2個(gè)表達(dá)式組成,2個(gè)表達(dá)式計(jì)算后的結(jié)果分別作為鍵:值填充到字典中。
下面代碼將值作為鍵,平方作為值,創(chuàng)建一個(gè)字典:
{v:v**2 for v in range(5)}
鍵和值部分也可以分開循環(huán):
{k:v for k,v in zip((1,2,3), ('a','b','c'))}
以上即是Python中常用的表達(dá)式用法,靈活運(yùn)用可以方便的建立各種對(duì)象。更多關(guān)于Python 推導(dǎo)表達(dá)式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python小知識(shí)之幾種推導(dǎo)式用法示例
- Python列表推導(dǎo)式詳解
- Python進(jìn)階之列表推導(dǎo)與生成器表達(dá)式詳解
- python基礎(chǔ)操作列表推導(dǎo)式
- Python列表推導(dǎo)式的基本操作詳解
- Python使用列表推導(dǎo)式快速生成列表
- Python的列表推導(dǎo)式實(shí)例詳細(xì)解析
- Python基礎(chǔ)知識(shí)之推導(dǎo)式詳解
- Python特性之列表推導(dǎo)式和生成器表達(dá)式詳解
- python實(shí)現(xiàn)列表推導(dǎo)式與生成器
- Python中列表乘法和列表推導(dǎo)式的區(qū)別舉例詳解
相關(guān)文章
flask中主動(dòng)拋出異常及統(tǒng)一異常處理代碼示例
這篇文章主要介紹了flask中主動(dòng)拋出異常及統(tǒng)一異常處理代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python腳本實(shí)現(xiàn)調(diào)用手機(jī)攝像頭
這篇文章主要為大家詳細(xì)介紹了Python如何通過,腳本實(shí)現(xiàn)調(diào)用手機(jī)攝像頭,這樣就能隨時(shí)隨地用電腦偷偷看看男朋友都在干啥了,感興趣的小伙伴可以了解下2025-03-03一文教你將Visual Studio Code變成Python開發(fā)神器
Visual Studio Code 是一款功能強(qiáng)大、可擴(kuò)展且輕量級(jí)的代碼編輯器,經(jīng)過多年的發(fā)展,已經(jīng)成為 Python 社區(qū)的首選代碼編輯器之一。本文將為大家介紹一下如何將Visual Studio Code變成Python開發(fā)神器,需要的可以參考一下2022-07-07Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié)
本文主要介紹了Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié),用戶發(fā)送請(qǐng)求時(shí)攜帶的參數(shù)后端需要使用,而不同的發(fā)送參數(shù)的方式對(duì)應(yīng)了不同的提取參數(shù)的方式,本文就詳細(xì)的介紹一下2021-08-08