tft每日頭條

 > 生活

 > python容器使用教程

python容器使用教程

生活 更新时间:2024-07-05 02:00:57

一、容器

Python中,可包含其他對象的對象,稱之為“容器”。容器是一種數據結構。常用的容器主要劃分為兩種:序列(如:列表、元祖等)和映射(如:字典)。序列中,每個元素都有下标,它們是有序的。映射中,每個元素都有名稱(又稱“ 鍵 ”),它們是無序的。除了序列和映射之外,還有一種需要注意的容器——“ 集合 ”。

二、通用的序列操作

有 5 種操作是所有序列中通用的。

(1)、索引

所謂“索引”,就是在序列中,根據所需元素的下标,返回所需元素。

以字符串的索引為例:

python容器使用教程(Python中的容器)1

‘ 2 ’為第三個元素的下标。當然,為了節省時間,我們大可不必為了索引而引入一個變量。我們可以直接在字符串上索引。

python容器使用教程(Python中的容器)2

直接在我們的目标序列後面加個索引所需的中括号就可以了。

python容器使用教程(Python中的容器)3

不僅如此,我們還可以在input函數上對用戶輸入的内容直接索引。

python容器使用教程(Python中的容器)4

(2)、切片

切片,就是在序列中切一塊。

索引就是拿我們想要的那一個,切片就是切我們想要的那一塊。索引隻能拿一個,切片可以切一段。其實本質上就是一種東西,切片就是索引的加強版。

兩個或三個索引就是切片。而且我們在上面所說的情況,也适用。

python容器使用教程(Python中的容器)5

python容器使用教程(Python中的容器)6

特别的,若第二個索引在第一個索引之前,則輸出空序列。

python容器使用教程(Python中的容器)7

若用戶填入空索引,計算機将根據前兩個索引所處的前後位置,默認為序列的前後端點。

python容器使用教程(Python中的容器)8

魔獸玩家的浪漫

第三個索引有關“步長”,步長不能為“0”,否則程序無法向前移動。當步長為負數時,切片從後向前執行。

python容器使用教程(Python中的容器)9

python容器使用教程(Python中的容器)10

(3)、序列相加

其實就是用“ ”來拼接序列。例如:

python容器使用教程(Python中的容器)11

python容器使用教程(Python中的容器)12

隻不過相加的前提是兩者必須為同一類型的序列:

python容器使用教程(Python中的容器)13

(4)、乘法

其實就是用“*”來進行乘法運算。

python容器使用教程(Python中的容器)14

(5)、成員資格

所謂“成員資格”測試,就是指“用運算符 in 來檢測指定元素是否包含于序列”。

例如:

python容器使用教程(Python中的容器)15

如果元素包含于序列,程序返回“True”;反之,返回“False”。

三、列表

現在來總結下列表相比于其他序列特殊的地方——“可修改”與“列表方法”。

開始之前應提到函數 list。

python容器使用教程(Python中的容器)16

該函數對任何序列都有用。

(1)、修改列表

1、給元素賦值

直接利用下标就可以修改列表(明顯的用戶友好型)。

python容器使用教程(Python中的容器)17

2、用 del 函數删除

其實 del 函數對很多東西都适用。

python容器使用教程(Python中的容器)18

3、用切片替換

切片的作用的實際情況就是用一個片段替換另一個片段。

python容器使用教程(Python中的容器)19

發揮點想象力,用空列表來操作的話,我們就可以達到和删除一樣的效果。

python容器使用教程(Python中的容器)20

以及和增加一樣的效果。

python容器使用教程(Python中的容器)21

(2)、列表方法

所謂方法,就是指與對象(字符串,參數等)緊密聯系的函數。

方法調用時,方法前要加上對象名和句點。

python容器使用教程(Python中的容器)22

1、append

append函數會将指定對象直接加到列表末尾。

python容器使用教程(Python中的容器)23

注——養成良好編程習慣:在實際運用中,為了不使計算機發生識别障礙,一般不提倡使用和函數名一樣的變量名。所以之前所舉的例子中,使用“ list ”命名變量實際是一個錯誤的示範(與 list 函數同名)。

2、clear

像字面意思一樣,一鍵歸零。

python容器使用教程(Python中的容器)24

實際效果可以用另一句話代替。

python容器使用教程(Python中的容器)25

這樣就不用打那麼多字。(懶即正義)

3、copy

和字面意思一樣,複制。

python容器使用教程(Python中的容器)26

當然,它也是可替代的。

python容器使用教程(Python中的容器)27

python容器使用教程(Python中的容器)28

實際上,這函數意義不大,因為根本沒必要這麼麻煩。

python容器使用教程(Python中的容器)29

直接賦值就行了。

4、count

計數的,看你出現了幾次。

python容器使用教程(Python中的容器)30

python容器使用教程(Python中的容器)31

5、extend

append 的增強版,可以把一段加到列表後面。

python容器使用教程(Python中的容器)32

同樣可以被代替,一個簡單的加号就可以完成。

python容器使用教程(Python中的容器)33

切片也可以做到,但代碼可讀性相對不高。

python容器使用教程(Python中的容器)34

6、index

在列表中依次(下标從小到大)查找元素,若元素存在,則返回第一次出現的下标。反之,若元素不存在,則返回錯誤。

python容器使用教程(Python中的容器)35

7、insert

按你所提供的下标插入你所提供的元素。(前為下标,,後為元素)

python容器使用教程(Python中的容器)36

8、pop

從列表中依據你所提供的下标删除對應元素,并返回所删除的元素。當pop函數括号中不含下标時,默認為列表最後一個元素。

python容器使用教程(Python中的容器)37

若括号中含有下标,則按括号中來進行。删除後的列表将不含删除值。

python容器使用教程(Python中的容器)38

注:pop函數是唯一一個既修改了列表又返回了函數值的函數。(注意“修改了”的前提,copy函數便沒有修改,也含有返回值。)如圖:list1在接受了函數append的返回值後,直接變成了None,這是因為append函數直接返回了None。你可能會發現這裡我用了print函數,而沒有像之前一樣用語句直接返回。這是因為對空的list1,隻有用print才有返回值,用語句直接輸入無返回值。

python容器使用教程(Python中的容器)39

而pop函數有返回值。

python容器使用教程(Python中的容器)40

push 和 pop是大家普遍接受的兩種“棧”操作。Python不提供 push ,所以我們用 append 來代替。

9、remove

remove會删除列表中含有的第一個用戶指定的元素。

python容器使用教程(Python中的容器)41

10、reverse

将列表倒過來。

python容器使用教程(Python中的容器)42

你會發現這些函數全都可以用切片來實現。

11、sort

将列表按從小到打的順序排序,無返回值。

python容器使用教程(Python中的容器)43

這裡要提到一個類似的函數——sorted。

sorted 有返回值,故可以直接賦值。

python容器使用教程(Python中的容器)44

sorted 函數适用于所有序列,但它永遠返回一個列表。

python容器使用教程(Python中的容器)45

12、高級排序

sort 函數可以接受兩個關鍵字參數——key 和 reverse。

key 會給每一個元素生成一個相應的鍵,再按根據生成的鍵來進行排序。

那麼,key 是以什麼為參考來設置鍵的呢?這依賴于我們給它所賦予的函數。

python容器使用教程(Python中的容器)46

我們知道函數 len 是返回每個元素的長度,而“ key = len ”,就是我們前面所提到的将函數賦予 key 。這裡,len 函數将每個元素的長度返回,key 參數接收了這些長度值并轉化為鍵,sort 函數接受了鍵并進行排序,最終到我們的結果。

與 key 相同的是,reverse 參數也需要賦值。但我們不能賦予其函數,而隻能賦予其布爾值。reverse 将根據布爾值來決定函數排序後的反向排列是否執行。

python容器使用教程(Python中的容器)47

python容器使用教程(Python中的容器)48

四、元組

元組也是序列,隻是不能修改。語法也簡單,加個逗号就可以變元祖。圓括号反倒無關緊要。

python容器使用教程(Python中的容器)49

python容器使用教程(Python中的容器)50

逗号至關重要!

python容器使用教程(Python中的容器)51

有無逗号就是計算機識别是否為元組的依據。

python容器使用教程(Python中的容器)52

元組并不複雜,對它的操作也不多。除了不可修改外,與它打交道的方法和對列表打交道的方法沒有不同(index、count等元祖沒有的方法除外。)

比如切片在列表怎麼用,對元組就怎麼用。

python容器使用教程(Python中的容器)53

一般而言,在序列方面的需求,一個列表就足以滿足。那麼我們接觸元組有什麼意義嗎?

1、元組用作映射中的鍵。(列表不能)

2、有些内置函數返回元組。(你還有什麼理由?)

五、字符串

本來不想寫字符串的,但寫序列要是漏了字符串,感覺上還是少了什麼。

既然要寫,就盡量把基礎寫全吧。字符串的内容本來就多。接下來的版塊将多于列表和元組。

前面我們已經講過序列的基本操作方法,所以如何使用索引和切片來操作字符串應該不是什麼難點。和元祖相同的一點是,字符串不能修改,所以切片賦值和元素賦值等方法都是違法的。當然,我們可以通過其他方法來達到與删減同樣的效果。

有關字符串,首先我們來談談如何設置字符串的格式。

值得注意的是,對新手而言,這方面的内容起不到多大的實際作用。因為Python編程新手平時用不到這方面的知識,不過這是進階的必經之路,所以什麼時候學習,以及現在是否學習應該先想好,以免浪費時間。

1、設置字符串的格式

設置字符串格式的内容包含很多,這裡也隻是介紹其主要内容。在接下來的小節中,我們的主要思想是利用 format 函數來替換“替換字段”。

替換字段主要由三部分構成:字段名、轉換标志、格式說明符。接下來我們會詳細說明相關内容。

(1)、替換字段名

字段名,就是指相應字段的名号(索引和标識符)。利用 format 函數來替換相應字段的字段名,就是我們這一小節的主要目的。

在此之前,我們先來了解一下 format 函數的功能。

format 函數會用括号裡的内容替換字符串内花括号内的内容。

python容器使用教程(Python中的容器)54

當然,多個替換也是可以進行的。當我們不設置指定順序時,計算機會按默認位置進行替換。

python容器使用教程(Python中的容器)55

我們可以用數字來指定替換的位置(從0起步)。

python容器使用教程(Python中的容器)56

python容器使用教程(Python中的容器)57

也可以利用關鍵字參數。

python容器使用教程(Python中的容器)58

當然,用戶并非隻能訪問值得本身,還可以訪問值的成分。

python容器使用教程(Python中的容器)59

也可以使用句點表示法來訪問導入的模塊中的方法、屬性、變量和函數。

python容器使用教程(Python中的容器)60

(2)、基本轉換

根據我們提供的“轉換标志”,利用 format 函數可以将目的字段轉換為我們想要的格式。

當我們用來轉換的字段為字符串時,一般我們會在目的字段與轉換标志之間夾入“!”。

python容器使用教程(Python中的容器)61

如圖,這裡花括号内的 python 即為目的字段,format 函數括号内的 python 即為我們指定的字符串,而!後的“a、s、r”就是我們所提到的轉換标志。

計算機會先用 format 函數括号内的内容代替花括号裡的内容,再根據轉換标志轉換替換後的數據。

這裡的 s、r、a、分别表示 str、repr、ascii。了解了這個信息,那麼 idle 的返回值就很好理解了。

此外,當我們用來轉換的字段為數值時,一般我們會在目的字段與轉換标志之間夾入":"。

python容器使用教程(Python中的容器)62

這裡的 b 表示将字段轉換為二進制。

當然,還有許多其他的轉換标志:c(unicode)、d(十進制)、e(科學表示法)、E(同 e ,但 E 用來表示指數)、f(定點數)……

這裡便不一一指出了。

(3)寬度、精度、千位分隔符

某些時候,我們在返回一個值時,需要調節返回值的寬度,以便對齊。所謂的調節寬度,其實就是通過在返回值的前面或後面加空格來調節返回值的位置。

這時,若替換字段為數值,則默認在返回值前面加空格;若替換字段為字符串,則默認在返回值後面加空格。

python容器使用教程(Python中的容器)63

這裡的 20 指的就是所加空格的數量,而空格的數量直接調節了寬度。總結即為:在冒号後面直接加數值來調節寬度。

設置浮點數時,計算機一般默認精确到小數點後六位。但是我們可以根據需要調節我們指定數的精度(精确度)。

python容器使用教程(Python中的容器)64

這裡的“.”表示精度調節,“3”表示精度調節到,“.3”表示精度調節到小數點後3位。

當然,其他類型也可指定精度。

python容器使用教程(Python中的容器)65

值得注意的是,如果要調節精度與寬度,那麼就不能像之前一樣用“!”分隔目的字段與指示符,而必須用“:”。

python容器使用教程(Python中的容器)66

當然,我們也可以同時使用寬度調節、精度調節、轉換标志。

python容器使用教程(Python中的容器)67

要注意必要的格式,寬度調節在最前,精度調節在其後,轉換标志在最後,特别提出,這裡的 f 表示定點數的轉換。

另外一個值得注意的是“千位分隔符”。

python容器使用教程(Python中的容器)68

當我們在冒号後面加逗号時,則計算機識别我們需要使用千位分隔符。千位分隔符,顧名思義,就是每三個數位分隔一次。

我們可以同時使用之前所提到的知識。

python容器使用教程(Python中的容器)69

千位分隔符會放在寬度調節與表示精度調節的句點之間。

(4)、符号、對齊和用 0 填充

有三種方法可以使你輸出負數。

第一種,直接在 format 函數後的括号内加負數。

python容器使用教程(Python中的容器)70

第二種,運用符号說明符。符号說明符往往放在冒号與寬度之間。特别的,如果用空格代替符号說明符,則默認在數值前填充空格。

python容器使用教程(Python中的容器)71

第三種,直接在字符串内加符号。

python容器使用教程(Python中的容器)72

很多需要設置數字格式的機制(例如打印一份表格)在大多數情況下隻需設置相應的寬度與精度即可。但是在有些時候,我們需要特殊的操作才能實現我們的目的。例如當對象中含有字符串與數值時,由于字符串與數值的默認對齊方式不同(字符串會在前面填充空格,數值會在後面填充空格),往往将引發一系列問題。

為了解決這些問題,我們隻需在特定的位置增加一些符号就行了。例如,若在冒号與寬度之間加個“0”,則表示用“0”來填充數值前的空隙。這可以很好的解決當負數存在時,數據長度參差不齊的問題。

python容器使用教程(Python中的容器)73

若在冒号與寬度之間加入“<、>、=”,則表示“左對齊、右對齊、居中間”,方便數據的一體化操作。

python容器使用教程(Python中的容器)74

當然,我們還可以用指定字符來代替默認的空格,隻需在冒号與寬度間加入指定字符。(注意,特殊字符“$”後加了“^”)

python容器使用教程(Python中的容器)75

特别的一種情況,如果我們在冒号與寬度之間加入“=”,那麼程序的輸出值就會将符号說明符與數值遠遠隔開(實質:默認将符号放在最前面)。

python容器使用教程(Python中的容器)76

最後我們要提到的一個要素是“#”符号,你可以将其放入符号說明符和寬度之間。(沒有符号說明符的話,就是冒号與寬度之間)根據你的數據類型不同,“#”将引發不同的數據轉化方式。下面以二進制和十進制為例,在不同的情況下加入“#”,所産生的效果也不同。前者為直接在數值前加入進制類型的表示符,後者為精确到小數點後幾位。

python容器使用教程(Python中的容器)77

下面來談談字符串方法。

2、字符串方法

前面我們談到了列表的方法,字符串的方法比其多得多。這裡我們隻讨論其中最有用的方法。當然,筆者以後可能會在這篇文章的基礎上,繼續補充更多的字符串方法,所以,應該先學好這篇文章的方法再考慮更多的事情。

字符串方法大多是從模塊 string 中繼承而來,在較早的 python 版本中,這些方法就是模塊 string 中的函數。如果有需要,我們至今仍可以引用這個模塊。

為什麼這個模塊至今仍未淘汰?因為模塊 string 包含一些字符串方法裡沒有的函數與常量。例如:string.digits:包含數字0~9的字符串。string.ascii_letters:包含所有ASCII字母(大寫與小寫)的字符串。string.punctuation:包含所有ASCII标點字符的字符串。…………當然,雖然說的是ASCII字符,但其實是未解碼的Unicode字符串。

接下來,在講述相關方法時,我可能會繼續說明其他相關方法,而這些附加說明的方法不是我們今天的主要内容,讀者可以根據需要自行選學。(會放入特定的版塊)

(1)、center

運用 center 方法,我們可以在指定字符串的兩邊填充特殊字符(默認為空格)。

python容器使用教程(Python中的容器)78

括号裡的數字限定了程序輸出的字符串的長度。觀察下面的圖片應該就可以明了我的意思。

python容器使用教程(Python中的容器)79

計算機會先獲取輸入字符串的位數,與 center 方法裡的數值進行比較。如果數值大于位數,那麼計算機會将輸入字符串居中,多餘位置進行指定字符的填充工作。計算機會默認将多餘位置左右平均分配,但如果多出來的數是單數,那麼計算機會默認把多出來的一位放在右邊(觀察上面第三個小程序就可以明了)。

如果位數大于或等于數值,那麼計算機會直接返回原字符串。

類似方法擴展(再次強調,下面的内容不是重點,請自行選學):string.ljust(width[,fillchar]):返回一個長度為 max(len(string),width) 的字符串,其開頭為當前字符串的副本,末尾為 fillchar 的指定字符(默認為空格)。string.rjust(widtn[,fillchar]):返回一個長度為 max(len(string),width) 的字符串,其開頭為 fillchar 的指定字符(默認為空格),末尾為當前字符串的拷貝。string.zfill(width):返回一個長度為 width 的字符串,相比原字符串,符号說明符( 、-)移到了開頭,字符串的左邊已被 0 填充。

(2)、find

我們可以通過 find 方法來檢驗字符串中是否含有某一子串。若子串存在,則 find 方法會返回該子串第一次出現的位置上的第一個字符的位置,若沒有找到,則返回-1。

python容器使用教程(Python中的容器)80

這就類似于我們之前提到的列表方法 index。

python容器使用教程(Python中的容器)81

之前講 index 時沒有提到某個細節,在這裡和 find 一起提出來。find 和 index 均可以指定遍曆的初始索引和終止索引。

python容器使用教程(Python中的容器)82

三個位置分别代表(“子串”,起始索引,終止索引)。值得注意的是,該方法便利的範圍包含起始索引位置,不包含終止索引位置。Python中常有這樣的設定。

類似方法擴展:string.rfind(sub[,start[,end]]):返回遍曆到的最後一個子串的最後一個字符的位置的索引,若沒有找到,則返回-1,可以指定起始索引和終止索引。string.index(sub[,start[,end]]):返回遍曆到的第一個子串的第一個字符的位置的索引,若沒有找到,則返回 ValueError 異常,可以指定起始索引和終止索引。string.rindex(sub[,start[,end]]):返回遍曆到的最後一個子串的最後一個字符的位置的索引,若沒有找到,則返回 ValueError 異常,可以指定起始索引和終止索引。string.count(sub[,start[,end]]):記錄 sub 出現的次數,可以指定起始索引和終止索引。string.startswith(prefix[,start[,end]]):檢查字符串是否以 prefix 打頭,可以指定檢查的起始索引和終止索引。string.endswith(suffix[,start[,end]]):檢查字符串是否以 suffix 結尾,可以指定檢查的起始索引和終止索引。

3、join

字如其意,可以合并序列的元素。

值得注意的是:第一,用來合并的序列必須是字符串列表;第二,其實際效果是将原字符串插入字符串列表的空隙中從而形成一個新的字符串。詳情請見圖。

python容器使用教程(Python中的容器)83

4、lower

lower 會将字符串内所有的英文字母改為小寫形式。

python容器使用教程(Python中的容器)84

類似方法擴展:string.islower():檢查字符串中所有英文字母是否都為小寫。string.istitle():檢查字符串中位于非字母的後面的第一個字母是否為大寫,其他字母是否為小寫。string.isupper():檢查字符串中的所有英文字母是否都為大寫。string.translate(table):根據轉換表 table 對字符串中的所有字符都進行轉換,并返回結果。string.capitalize():返回字符串的副本,但第一個字母大寫。string.casefold():返回經過标準化後的字符串。string.swapcase():反轉字符串中所有字母的大小寫,并返回。string.title():将字符串中位于非字母的後面的第一個字母轉換為大寫。string.upper():将字符串中的所有英文字母轉換為大寫。

詞首大寫問題:既然說到 tittle 方法,就不得不談談詞首大寫問題。确實,title 可以将首字母轉換為大寫。但它的轉換結果卻有些不合理。

python容器使用教程(Python中的容器)85

你看,它将空格識别為了非字母的字符,從而導緻每個單詞都變成了首字母大寫。另一種類似的方法是使用 string 模塊中的函數 capwords。

python容器使用教程(Python中的容器)86

那麼,可不可以改善這個問題呢?當然可以,但是這得靠你自己改善自己的代碼,注意各種标點符号可能導緻的結果。總而言之,靠自己。

5、replace

用 replace 方法将指定字符串替換為另一個字符串,并改變結果。

python容器使用教程(Python中的容器)87

用不了多久,你就會明白這方法很有用。

類似方法擴展:string.expandtabs([tabsize]):返回将字符串中的制表符展開為空格後的結果,可指定可選參數 tabsize( 默認為8 ) 。

6、split

split 恰好是 join 的反面,依據目标字段分割指定字段。

python容器使用教程(Python中的容器)88

如果你沒有指定分隔符的話,程序就會默認在單個或多個連續的空白字符(空格、制表符、換行符等)處進行拆分。

類似方法擴展:string.partition(sep):在字符串中搜索 sep,并會以括号中的方式返回元祖。(sep 前的字段,sep,sep 後的字段)string.rpartition(sep):功能與上一個相同,但返回的元祖前後相反。string.split([sep[,maxsplit]]):與 split 功能相同,但方向為從後往前。maxsplit 可以指定最大劃分數。string.splitlines([keepends]):返回一個列表,其中包含字符串的所有行,若參數 keepends 為 true,則将會包含換行符。

7、strip

strip 可用來删除字符串開頭和末尾的指定字符,當參數為 None 時,則默認為空格。

python容器使用教程(Python中的容器)89

python容器使用教程(Python中的容器)90

類似方法擴展:string.lstrip([chars]):将字符串開頭所有的 chars 都删除,并返回結果。string.rstrip([chars]):将字符串末尾所有的 chars 都删除,并返回結果。

應用舉例:假設你需要依據學校的數據庫來查找亞曆山大同學的相關數據,那麼你自然需要以他的名字為索引。但是,你無法确定這位同學在輸入自己的名字時所輸入的大小寫情況。無法明了情況,一個個試的話就會很費力。一個學生還可以試出來,一百個呢?如何解決這種情況?隻需利用 lower 一鍵變成小寫,再搜索 “Alexanda”即可。同樣的,假設亞曆山大同學是标新立異的同學,他在輸入自己的名字時,加入了特殊字符來裝飾自己的名字,例如“ **$$ Alexanda . Bell $$** ”。那麼這時便可以使用 strip 來消除這位同學的鬼點子,雖然不确定特殊字符具體是哪幾個,但我們可以将鍵盤上的字符全部輸入為參數,就可以消除所有特殊字符。當然,若是他引用了Unicode裡的特殊字符的話,已經可以暴打一頓了。

8、translate

translate 和 replace 一樣可以替換字符串的特定部分,雖然 translate 隻可以替換單字符,但由于 translate 可以同時替換多個字符,所以效率要高于 replace 。

為了使用 translate,我們要确立一個轉換表 table 。table 将引入兩個參數,确立 Unicode 碼點間的映射關系,進行轉換。

例如,假設我們要将一段英語文本改成帶有德國口音的版本,那麼我們有必要将所有的“c”,“s”轉換成“k”,“z”。

python容器使用教程(Python中的容器)91

當然我們也可以直接查看 table,不過我們隻能看到碼點而已。

python容器使用教程(Python中的容器)92

9、判斷字符串是否滿足特定的條件

很多以 is 開頭的字符串方法都會判斷指定的字符串是否滿足某些條件,若滿足,則執行該方法,反之,則不執行。

例如:string.isalnum、string.isalpha、string.isdecimal、string.isdigit、isspace……

這裡便不一一指出,有需要可以自行上網搜索。

接下來,我們開始聊聊字典。

六、字典

字典直接這樣創造,前“鍵”後“值”,合起來稱之為“項”。(字典中的“鍵”必須是獨一無二的)

python容器使用教程(Python中的容器)93

字典是 Python 中的唯一内置映射,和之前所提到的列表、字符串一樣,字典也擁有它的轉換函數—— dict (其實根本就不是一個函數,而是一個類)。值得注意的是,下圖的轉換我們利用了元祖。

python容器使用教程(Python中的容器)94

也可以利用關鍵字實參來調用這個函數。

python容器使用教程(Python中的容器)95

(1)、字典的基本操作

字典的基本操作與序列非常類似。

len( dict ):返回字典 dict 對應的項數。d[ k ]:返回與鍵 k 相應的值。d[ k ] = v:直接将值 v 關聯到鍵 k 。del d[ k ]:删除鍵為 k 的項。k in d:檢查鍵 k 是否包含于字典 d 。

這裡指出一些重要的不同之處。

1、鍵的類型:與序列的索引不同,字典的鍵不限于整數,任何不可變的數據類型皆可以為鍵。2、自動增加:我們可以直接将字典不含有的項加入字典,而不需像序列一樣用取代或函數的方式,這一點之後會說明。3、成員資格:a in d 是指 a 是否存在于字典 d 的鍵中,而不是值中。而在序列中,in 用來查找相應的值。

這裡我們要詳細說明一下第二點。

python容器使用教程(Python中的容器)96

通過程序運行我們可以看到,我們無法直接在列表中加入一個新的元素。但是對于字典,我們可以直接加入一個新的項。

如果我要使得我對列表 list1 的操作可行,我就不得不在列表 list1 中加入51個 None 。

(2)、将字符串格式設置功能用于字典

之前講過利用字符串格式設置功能來設置值得格式。其實,我們也可以利用利用字典,來使得格式設置更容易。但是在使用字典時,我們必須使用 format_map 來指明對象。

python容器使用教程(Python中的容器)97

如你所見,通過 format_map 指明對象後,我們可以通過鍵來同時代入多個對象。不得不提的是,在模闆系統中,這種設置方式很有用。

(3)、字典方法

字典方法的使用并沒有列表和字符串那樣頻繁,所以可以在需要時,再來學習這裡。

1、clear

和列表中的 clear 一樣,可以清除字典中的所有項。這個方法其實是很有用的,我們來看兩段代碼:

第一段:

python容器使用教程(Python中的容器)98

第二段:

python容器使用教程(Python中的容器)99

我承認上述代碼對初學者不太友好,這主要有關 python 的數據儲存方式,如果你可以明了我在說什麼的話,你可以很容易就從上面的代碼中明了我想表達 clear 的什麼用法。如果看不懂上述代碼,可以先忽略上述代碼,直接看下一個方法。

2、copy

和列表方法中的 copy 一樣,copy執行的是字典的複制。然而這種複制是一種“淺複制”。觀察下列代碼:

python容器使用教程(Python中的容器)100

和之前一樣,如果你明了 python 的數據存儲方式,就能看懂上述代碼究竟發生了什麼。當我們執行淺複制時,如果替換副本中的值,原本不會改變。但若修改副本中的值,則原本會改變。

深複制則不會發生這種問題,如果要實現深複制的話,就必須使用模塊 copy 中的函數 deepcopy 。

python容器使用教程(Python中的容器)101

3.fromkeys

使用該方法可以創建一個新字典,其中包含指定的鍵,且每個鍵對應的值都是 None 。

python容器使用教程(Python中的容器)102

當然,也可以直接對 dict 調用 fromkeys 。我們之前說過 dict 并非函數,而是類。熟悉了這一點,就很好理解這一操作。

python容器使用教程(Python中的容器)103

當然,我們也可以指定我們所需要的值。

python容器使用教程(Python中的容器)104

4、get

如果你試圖直接訪問字典中不存在的項。

python容器使用教程(Python中的容器)105

如果你使用 get 來訪問項,如果項不存在:

python容器使用教程(Python中的容器)106

如果項存在:

python容器使用教程(Python中的容器)107

那麼他就等價于直接訪問字典的結果了。

5、items

items 會返回一個包含所有字典項的列表,其中每個元素都為鍵值對的形式,且排列順序不确定。

python容器使用教程(Python中的容器)108

這種類型稱之為“字典視圖”,可以用于疊代。我們可以用 len() 确認其長度,以及用 in 對其執行成員資格檢查。

字典視圖的一個特性就是:它不屬于複制,它始終是底層字典的反應,底層字典發生變化,相應的字典視圖也會發生變化。

python容器使用教程(Python中的容器)109

當然,我們可以之間将字典視圖用 list 轉化為列表進行複制。

6、keys

返回一個字典視圖,但隻包含鍵。

python容器使用教程(Python中的容器)110

7、pop

同列表中的使用一樣,效果也一樣。不過 pop 的括号中放入的是鍵。

8、popitem

類似于 pop 。

由于字典屬于映射,各元素之間沒有順序關系,所以 popitem 隻是随機剔除一個項。如果想要 popitem 以可預測的順序彈出項,請參閱模塊 collections 中的 OrderedDicts 類。

9、setdefault

類似 get ,可以獲取與指定鍵相關聯的值。當字典不包含該項時,則自動加入該項。

10、update

使用另一個字典中的項來更新目标字典。沒有的會加入,不同的會替換。

python容器使用教程(Python中的容器)111

11、values

類似于 keys,返回一個有字典中的值所組成字典視圖。

以上。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved