Python 推導(dǎo)表達式的幾種方法實現(xiàn)
推導(dǎo)表達式(也稱為解析語法)是Python中一種遍歷序列并創(chuàng)建指定類型對象的方法,相對于使用for循環(huán)遍歷,推導(dǎo)表達式在語法上更加簡潔。常用的推導(dǎo)表達式有:列表表達式、生成器表達式、字典表達式、集合表達式等。
一、列表表達式
列表表達式是一種通過遍歷序列構(gòu)造列表對象的方法。
語法是在中括號中一個表達式緊跟著1或多個for語句,以及0或多個if子句。Python會將表達式在for語句中依次循環(huán),并應(yīng)用if語句過濾(如果有的話),最后將結(jié)果按順序填充到列表中。

例如將range(10)中偶數(shù)的平方添加到列表中,常規(guī)for循環(huán)代碼如下:
l = []
for v in range(10):
if v%2 == 0:
l.append(v**2)

下面是等價的列表表達式,依次將表達式、for語句、if語句寫在方括號中即可,相對于上面的代碼更加簡潔:
l = [v**2 for v in range(10) if v%2==0]

如遇到嵌套循環(huán),只需要在表達式中按順序編寫for語句和if語句即可。在下面由元組組成的列表中,找出長度為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)

換成列表表達式,只需按多層嵌套的順序依次填寫for和if子句即可:
l = [v**2 for t in lt for v in t if len(t)==4 if v%2==0]

結(jié)果相同,但代碼量少了許多,如果有更多的嵌套,只需要按順序添加即可。
二、生成器表達式
生成器表達式的語法和列表表達式幾乎相同,只是括號由中括號換成小括號,這一變化的結(jié)果是返回對象不再是一個列表,而是一個生成器,你可以根據(jù)需要手動迭代取出結(jié)果。由于它不會像列表表達式那樣一次性生成所有的結(jié)果,因此在處理大對象時生成器表達式相比列表表達式則更節(jié)約內(nèi)存。

將列表表達式中的中括號替換為小括號,即是生成器表達式:
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方法手動取出2個元素,然后用for循環(huán)取出剩下元素。
注意生成器對象完成一次迭代后就消耗掉了,再次嘗試獲取值時會得到StopIteration異常:
next(g)

三、集合表達式
集合表達式和列表表達式的區(qū)別也是括號不同,集合表達式用花括號包圍,最后得到的結(jié)果是一個集合,注意空的{}創(chuàng)建的不是集合而是字典。

只需要將列表表達式的[]替換為{}即變成集合表達式,對比下面列表表達式和集合表達式,注意集合會自動去重:
[v%3 for v in range(10)]
{v%3 for v in range(10)}

四、字典表達式
字典表達式也是由花括號包圍,表達式部分需要由冒號分隔的2個表達式組成,2個表達式計算后的結(jié)果分別作為鍵:值填充到字典中。

下面代碼將值作為鍵,平方作為值,創(chuàng)建一個字典:
{v:v**2 for v in range(5)}

鍵和值部分也可以分開循環(huán):
{k:v for k,v in zip((1,2,3), ('a','b','c'))}

以上即是Python中常用的表達式用法,靈活運用可以方便的建立各種對象。更多關(guān)于Python 推導(dǎo)表達式的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python利用卡方Chi特征檢驗實現(xiàn)提取關(guān)鍵文本特征
卡方檢驗最基本的思想就是通過觀察實際值與理論值的偏差來確定理論的正確與否。本文將利用卡方Chi特征檢驗實現(xiàn)提取關(guān)鍵文本特征功能,感興趣的可以了解一下2022-12-12
python中dict字典的查詢鍵值對 遍歷 排序 創(chuàng)建 訪問 更新 刪除基礎(chǔ)操作方法
字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中,本文講述了python中dict字典的查詢鍵值對 遍歷 排序 創(chuàng)建 訪問 更新 刪除基礎(chǔ)操作方法2018-09-09
Python將Excel轉(zhuǎn)換為多種圖片格式的方法(PNG, JPG, BMP, SVG)
有時,你可能希望以圖片形式分享Excel數(shù)據(jù),以防止他人對數(shù)據(jù)進行修改或編輯,將Excel轉(zhuǎn)換為圖片可以將數(shù)據(jù)鎖定為靜態(tài)圖片,確保數(shù)據(jù)的完整性和準確性,這篇文章將探討如何使用Python實現(xiàn)將Excel工作表轉(zhuǎn)換為多種圖片格式,如PNG,JPG,BMP和SVG,需要的朋友可以參考下2025-03-03
基于Python開發(fā)圖像數(shù)據(jù)清洗&圖像質(zhì)量檢查工具
隨著目前采集的數(shù)據(jù)集中的圖像越來越多,出現(xiàn)了數(shù)據(jù)格式十分雜亂、質(zhì)量不統(tǒng)一等問題,下面小編就來用Python制作一個圖像數(shù)據(jù)清洗&圖像質(zhì)量檢查工具吧2025-03-03
Python的線程使用隊列Queue來改造轉(zhuǎn)賬場景
前篇我們了隊列Queue和轉(zhuǎn)賬場景這次趁熱學(xué)委展示一下使用隊列解決轉(zhuǎn)賬場景的問題,這篇文章主要介紹了Python的線程使用隊列來改造轉(zhuǎn)賬場景,需要的朋友可以參考一下2022-02-02

