日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:一文讀懂列表解析、字典解析、集合解析

一、所謂解析/解析式,也稱為推導(dǎo)/推導(dǎo)式,對應(yīng)英語單詞為comprehension,是Python的一種獨(dú)有特性。解析就是從一個數(shù)據(jù)序列構(gòu)建另一個新的數(shù)據(jù)序列的結(jié)構(gòu)體,其本質(zhì)是使用一個可迭代對象,按一定規(guī)則通過表達(dá)式、函數(shù)等運(yùn)算后得到一個新的迭代對象,列表解析得到的就是列表對象,字典解析得到的是字典,集合解析得到的是集合。

站在用戶的角度思考問題,與客戶深入溝通,找到茌平網(wǎng)站設(shè)計與茌平網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋茌平地區(qū)。

二、語法釋義

1.列表解析:通過解析表達(dá)式從一個可迭代對象生成一個新的列表

[expr for iter_var in iterable]
[expr for iter_var in iterable if cond_expr]

其中:

語句中的中括號表示返回數(shù)據(jù)轉(zhuǎn)換為列表。

expr為計算新列表元素值的表達(dá)式

iter_var:表示運(yùn)算表達(dá)式處理的對象所在的容器,解析就是針對在可迭代對象iter_var中的每個元素進(jìn)行表達(dá)式運(yùn)算后得到的值作為新列表的元素過程;

if cond_exp:表示可迭代對象中的元素需要滿足指定條件才會參與表達(dá)式運(yùn)算,如果需要帶多個條件,可以在if表達(dá)式后再疊加一個if表達(dá)式。如:

l=[chr(i+ord('A')) for i in range(26) if i%2==0 if i%3==0 if i%4==0 ]#結(jié)果為:['A', 'M', 'Y']

上面例子中:

ord(c)函數(shù):返回字母c的unicode碼,ASCII字符返回的就是ASCII碼

chr(i)函數(shù):返回一個unicode碼對應(yīng)的字符,0 <= i <= 0x10ffff,如果i是ASCII碼的范圍則返回ASCII字符

range是上一節(jié)介紹的函數(shù),在此用于生成一個0到25的序列迭代的range對象。

上述列表解析的語句表示:用for訪問range對象的每個元素i,當(dāng)元素i能整除2、3、4即能被12整除時,就生成一個字母,該字母的ASCII碼值為'A'的ASCII碼值加上i的值,按照上述邏輯,i為0、12、 24時滿足要求,對應(yīng)的字母即為結(jié)果列表中的元素。

2.集合解析:通過解析表達(dá)式從一個可迭代對象生成一個新的集合

{expr for iter_var in iterable }
{expr for iter_var in iterable if cond_expr}

集合解析與列表解析的區(qū)別就是將列表解析的中括號換成大括號,以此決定返回值是一個集合,其他的沒有什么不同。

注意:集合是會剔重的,如果出現(xiàn)重復(fù)值則只保留一個。

3.字典解析:通過解析表達(dá)式從一個可迭代對象生成一個新的字典

{key_expr:value_expr for iter_var in iterable }
{key_expr:value_expr for iter_var in iterable if cond_expr }

字典解析也是使用大括號,但是必須在語句中同時指定鍵和值的計算表達(dá)式,確保生成的元素是使用冒號分隔的鍵-值對,其他的與集合解析類似。其中鍵的計算表達(dá)式為key_expr,值的計算表達(dá)式為value_expr。

注意:字典的鍵必須是唯一的,如果計算元素時出現(xiàn)鍵重合,如果出現(xiàn)重復(fù)值則只保留一個。

舉例:用一個數(shù)字列表生成數(shù)字和字母(計算方法參考上面的例子)映射關(guān)系的字典數(shù)據(jù)

d={i:chr(ord('a')+i) for i in [1,1,2,3]} ?#結(jié)果d的值為:{1: 'b', 2: 'c', 3: 'd'}
d={i:chr(ord('a')+i+index) for index,i in enumerate([1,1,2,3])}

#結(jié)果d的值為:{1: 'c', 2: 'e', 3: 'g'},enumerate函數(shù)請參考上一節(jié)的介紹

上面例子可以看到,重復(fù)的鍵1只保留了一個字典元素,該元素保留的是該鍵最后一個值對應(yīng)的鍵-值對。

三、補(bǔ)充說明

1.在生成器一節(jié)已經(jīng)介紹了生成器解析,生成器解析實(shí)際上就是生成器表達(dá)式,在此不再贅述;

2.在前面介紹時沒有提到元組解析,同時當(dāng)語句外面用小括號時實(shí)際對應(yīng)的是生成器而不是元組,因此Python并沒有元組解析這個概念,如果需要通過解析得到元組,可以通過列表解析、生成器解析方式先生成列表或生成器,再通過tuple方法將其轉(zhuǎn)換為元組;

3.雖然用語句循環(huán)賦值的方式也能實(shí)現(xiàn)上述幾種解析方法,但使用解析的方法更精簡、運(yùn)行更快;

4.解析不會改變參數(shù)中的原有迭代對象的值;

5.在解析中使用多個for語句等同于多個for循環(huán),如下面代碼實(shí)現(xiàn)了兩個列表生成第三個列表且其元素為前2個列表的笛卡爾積:

numb=[i for i in range(2)]
abc=[chr(ord('a')+k) ?for k in range(2)]
d=[(a,n) for a in abc for n in numb]

 #結(jié)果為:

[('a', 0), ('a', 1), ('b', 0), ('b', 1)]

網(wǎng)頁題目:創(chuàng)新互聯(lián)Python教程:一文讀懂列表解析、字典解析、集合解析
文章地址:http://www.dlmjj.cn/article/ccojjjc.html