第八章、列表與字典

列表

列表是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)讀?。?/h4>

②、任意對(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ù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,748評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,165評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,595評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,633評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,435評(píng)論 6 405
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,943評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,035評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,175評(píng)論 0 287
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,713評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,599評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,788評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,303評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,034評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,412評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,664評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,408評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,747評(píng)論 2 370

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