91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

列表解析、字典解析、集合解析的區別

發布時間:2020-09-25 09:12:33 來源:億速云 閱讀:150 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關列表解析、字典解析、集合解析的區別,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一、所謂解析/解析式,也稱為推導/推導式,對應英語單詞為comprehension,是Python的一種獨有特性。解析就是從一個數據序列構建另一個新的數據序列的結構體,其本質是使用一個可迭代對象,按一定規則通過表達式、函數等運算后得到一個新的迭代對象,列表解析得到的就是列表對象,字典解析得到的是字典,集合解析得到的是集合。

二、語法釋義

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

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

其中:

語句中的中括號表示返回數據轉換為列表。

expr為計算新列表元素值的表達式

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

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

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

上面例子中:

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

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

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

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

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

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

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

注意:集合是會剔重的,如果出現重復值則只保留一個。

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

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

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

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

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

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

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

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

三、補充說明

1.在生成器一節已經介紹了生成器解析,生成器解析實際上就是生成器表達式,在此不再贅述;

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

3.雖然用語句循環賦值的方式也能實現上述幾種解析方法,但使用解析的方法更精簡、運行更快;

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

5.在解析中使用多個for語句等同于多個for循環,如下面代碼實現了兩個列表生成第三個列表且其元素為前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]

 #結果為:

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

上述就是小編為大家分享的列表解析、字典解析、集合解析的區別了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

璧山县| 延长县| 普洱| 东阳市| 色达县| 龙陵县| 抚远县| 肥东县| 泰来县| 昔阳县| 博乐市| 常熟市| 新宾| 广昌县| 甘泉县| 阿尔山市| 浪卡子县| 靖安县| 潼关县| 沛县| 江源县| 慈利县| 红河县| 麟游县| 屏东市| 临西县| 来凤县| 莱州市| 绥棱县| 突泉县| 南京市| 英超| 大新县| 雷州市| 永定县| 陈巴尔虎旗| 巧家县| 咸宁市| 苏尼特右旗| 岫岩| 远安县|