第八章、列表與字典

列表

列表是Python中最具靈活性的有序集合對(duì)象類型。

Python列表是:

任意對(duì)象的有序集合

通過(guò)偏移讀取

可變長(zhǎng)度、異構(gòu)以及任意嵌套

屬于可變序列的分類

對(duì)象引用數(shù)組

實(shí)際應(yīng)用中的列表

1、基本列表操作:

由于列表是序列,它支持很多與字符串相同的操作。

2、列表迭代和解析:

3、索引、分片和矩陣:

由于列表都是序列,對(duì)于列表而言,索引和分片操作與字符串中的操作基本相同。

4、原處修改列表:

由于列表是可變的,他們支持原處改變列表對(duì)象的操作。

①、索引與分片的賦值:

當(dāng)時(shí)用列表的時(shí)候,可以將它賦值給一個(gè)特定項(xiàng)(偏移)或整個(gè)片段(分片)來(lái)改變它的內(nèi)容。

索引和分片的賦值都是原地修改,它們對(duì)列表進(jìn)行直接修改,而不是生成一個(gè)新的列表作為結(jié)果。

②、列表方法調(diào)用:

列表方法append:簡(jiǎn)單地將一個(gè)單項(xiàng)(對(duì)象引用)加至列表末端。

列表方法sort:原地對(duì)列表進(jìn)行排序。

列表方法reverse:可原地反轉(zhuǎn)列表。

列表方法extend:能夠在末端插入多個(gè)元素。

列表方法pop:能夠在末端刪除一個(gè)元素。

列表方法remove:通過(guò)值刪除某元素。

列表方法insert:在偏移處插入某元素。

列表方法index:查找某元素的偏移。

內(nèi)置函數(shù)sorted和reversed作用同上。

③、其他常見(jiàn)列表操作:

1、由于列表是可變的,你可以用del語(yǔ)句在原處刪除某項(xiàng)或某片段。

2、因?yàn)榉制x值是刪除外加插入操作,也可以通過(guò)將空列表賦值給分片來(lái)刪除列表片段(L[i:j]=[])。

字典

除了列表以外,字典(dictionary)也許是Python之中最靈活的內(nèi)置數(shù)據(jù)結(jié)構(gòu)類型。如果把列表看做是有序的對(duì)象集合,那么就可以把字典當(dāng)成是無(wú)序的集合。

python字典的主要屬性如下:

①、通過(guò)鍵而不是偏移量來(lái)讀取:

②、任意對(duì)象的無(wú)序集合:

③、可變長(zhǎng)、異構(gòu)、任意嵌套:

④、屬于可變映射類型:

⑤、對(duì)象引用表(散列表):

實(shí)際應(yīng)用中的字典

字典通過(guò)鍵進(jìn)行索引,被嵌套的字典項(xiàng)是由一系列索引(方括號(hào)中的鍵)表示的。

1、字典的基本操作:

內(nèi)置len函數(shù)也可用于字典,它能夠返回存儲(chǔ)在字典里的元素的數(shù)目,或者說(shuō)是其keys列表的長(zhǎng)度,這二者是等價(jià)的。

字典的has_key方法以及in成員關(guān)系操作符提供了鍵存在與否的測(cè)試方法,keys方法則能夠返回字典中所有的鍵,將它們收集在一個(gè)列表中。

2、原處修改字典:

與列表相同,字典也是可變的,因此可以在原處對(duì)它們進(jìn)行修改、擴(kuò)展以及縮短而不需要生成新字典。

del語(yǔ)句在這里也適用。它刪除作為索引的鍵相關(guān)聯(lián)的元素。

3、其他字典方法:

字典方法提供了多種工具。例如,字典values和items方法分別返回字典的值列表和(key,value)對(duì)元組。

讀取不存在的鍵往往都會(huì)出錯(cuò),然而鍵不存在時(shí)通過(guò)get方法能夠返回默認(rèn)值(None或者用戶定義的默認(rèn)值)。

字典的update帆帆有點(diǎn)類似于合并,但是,它和從左到右的順序無(wú)關(guān)。它把2一個(gè)字典的鍵和值合并到另一個(gè)字典中,盲目地覆蓋相同的鍵值。

字典的pop方法能夠從字典中刪除一個(gè)鍵并返回它的值。

4、語(yǔ)言表:

就任何字典D而言,寫(xiě)成for key in D:和寫(xiě)成完整的key in D.keys():效果是一樣的。

5、字典用法的注意事項(xiàng):

·序列運(yùn)算無(wú)效。

·對(duì)新索引賦值會(huì)添加項(xiàng)。

·鍵不一定總是字符串。

①、使用字典模擬靈活的列表:

②、字典用于稀疏數(shù)據(jù)結(jié)構(gòu):

③、避免missing-key錯(cuò)誤:

④、使用字典作為記錄:

6、創(chuàng)建字典的其他方法:

①、{'name':'mel','age':45}

②、D={} ?D['name']='mel? D['age']=45

③、dict(name='mel',age=45)

④、dict([('name','mel'),('age',45)])

這四種形式都會(huì)建立相同的兩鍵字典,但它們?cè)诓煌臈l件下有用:

①、如果你可以事先拼出整個(gè)字典,那么第一種是很方便的。

②、如果你需要一次動(dòng)態(tài)地建立字典的一個(gè)字段,第二種比較合適。

③、第三種關(guān)鍵字形式所需的代碼比常量少,但是鍵必須都是字符串才行。

④、如果你需要在程序運(yùn)行時(shí)把鍵和值逐步建成序列,那么最后一種形式比較有用。

如果所有鍵的值都相同,你也可以用這個(gè)特殊的形式對(duì)字典進(jìn)行初始化——簡(jiǎn)單地傳入一個(gè)鍵列表,以及所有鍵的初始值(默認(rèn)值為空):

>>>dict.fromkeys(['a','b'],0)

7、Python3.0中字典的變化:

①、支持一種新的字典解析表達(dá)式,這是列表和集合解析的“近親”。

②、對(duì)于D.key、D.values和D.items方法,返回可迭代的視圖,而不是列表。

③、由于前一點(diǎn),需要新的編碼方式通過(guò)排序鍵來(lái)遍歷。

④、不再直接支持相對(duì)大小比較——取而代之的是手動(dòng)比較。

⑤、不再有D.has_key方法——相反,使用in成員關(guān)系測(cè)試。

在Python3.0中的字典有什么新特性:

①、字典解析:

Python3.0中的字典可以用字典解析來(lái)創(chuàng)建。如下代碼使用對(duì)應(yīng)結(jié)果中的每一個(gè)鍵/值對(duì)構(gòu)建了一個(gè)新的字典:

>>>D={k:v for (k,v) in zip(['a','b','c'],[1,2,3])}

②、字典視圖:

在Python3.0中,字典的keys、values和items都返回視圖對(duì)象,而Python2.6中,它們返回實(shí)際的結(jié)果列表。

Python3.0中的字典視圖并非創(chuàng)建后不能改變——它們可以動(dòng)態(tài)地反映在視圖對(duì)象創(chuàng)建之后對(duì)字典做出的修改。

③、字典視圖和集合:

與Python2.X中的列表結(jié)果不同,keys方法所返回的Python3.0的視圖對(duì)象類似于集合,并且支持交集和并集等常見(jiàn)的集合操作;values視圖不是這樣的,因?yàn)樗鼈儾皇俏ㄒ坏模坏玦tems結(jié)果是的,如果(key,value)對(duì)是唯一的并且可散列的話。

④、排序字典鍵:

由于keys不會(huì)返回一個(gè)列表,必須要么手動(dòng)地轉(zhuǎn)換為一個(gè)列表,要么在一個(gè)鍵視圖或字典自身上使用sorted調(diào)用。

⑤、字典大小比較不再有效:

盡管在Python2.6中可以直接用<、>等比較字典的相對(duì)大小,但在Python3.0中這不再有效。然而,可以通過(guò)手動(dòng)地比較排序后的鍵列表來(lái)模擬。

Python3.0中字典相等性測(cè)試仍然有效。

⑥、has_key方法已死:in永生:

廣為使用的字典has_key鍵存在測(cè)試方法在Python3.0中取消了。相反,使用in成員關(guān)系表達(dá)式,或者帶有默認(rèn)測(cè)試的一個(gè)get(其中,in通常是首選的)。

本章小結(jié):

本章我們探討了列表和字典類型——這可能是在Python程序中所見(jiàn)到并使用的兩種最常見(jiàn)、最具有靈活性而且功能最為強(qiáng)大的集合體類型。本章介紹了列表類型支持任意對(duì)象的以位置排序的集合體,而且可以任意嵌套,按需要增長(zhǎng)和縮短。字典類型也是如此,不過(guò)它是以鍵來(lái)存儲(chǔ)元素而不是位置,并且不會(huì)保持元素之間任何可靠的由左至右的順序。列表和字典都是可變的,所以它們支持各種不適用于字符串的原處修改操作。例如,列表可以通過(guò)append調(diào)用來(lái)進(jìn)行增長(zhǎng),而字典則是通過(guò)賦值給新鍵的方法來(lái)實(shí)現(xiàn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容