更新時(shí)間:2021年04月01日15時(shí)11分 來(lái)源:傳智教育 瀏覽次數(shù):
組合數(shù)據(jù)類型可以將多個(gè)數(shù)據(jù)組織起來(lái),根據(jù)數(shù)據(jù)組織方式的不同,Python的組合數(shù)據(jù)類型可分成三類:序列類型、集合類型和映射類型,如圖1所示。
圖1 組合數(shù)據(jù)類型的分類
下面對(duì)圖1中的這三種類型進(jìn)行介紹。
(1)序列存儲(chǔ)一組排列有序的元素,每個(gè)元素的類型可以不同,通過(guò)索引可以鎖定序列中的指定元素。
(2)集合同樣存儲(chǔ)一組數(shù)據(jù),它要求其中的數(shù)據(jù)必須唯一,但不要求數(shù)據(jù)間有序。
(3)映射類型的數(shù)據(jù)中存儲(chǔ)的每個(gè)元素都是一個(gè)鍵值對(duì),通過(guò)鍵值對(duì)的鍵可以迅速獲得對(duì)應(yīng)的值。
1.序列類型
序列類型來(lái)源于數(shù)學(xué)概念中的數(shù)列。數(shù)列是按一定順序排成一列的一組數(shù),每個(gè)數(shù)稱為這個(gè)數(shù)列的項(xiàng),每項(xiàng)不是在其它項(xiàng)之前,就是在其它項(xiàng)之后。存儲(chǔ)n項(xiàng)元素的數(shù)列{an}的定義如下:
需要注意的是,數(shù)列的索引從0開(kāi)始。通過(guò)索引i可以訪問(wèn)數(shù)列中的第i-1項(xiàng),例如通過(guò)s1可獲取數(shù)列{Sn}中的第2項(xiàng)。
序列類型在數(shù)列的基礎(chǔ)上進(jìn)行了拓展,Python中的序列支持雙向索引:正向遞增索引和反向遞減索引,如圖2所示。
圖2 序列的索引體系
正向遞增索引從左向右依次遞增,第一個(gè)元素的索引為0,第二個(gè)元素的索引為1,以此類推;反向遞減索引從右向左依次遞減,最后一個(gè)元素的索引為-1,倒數(shù)第二個(gè)元素的索引為-2,以此類推。
Python中的序列主要有三種:字符串、列表和元組,關(guān)于它們的介紹如下:
(1) 字符串是由單一字符組成的不可修改的序列類型。
(2) 列表是一個(gè)可以修改的序列類型,使用相對(duì)更加靈活。
(3) 元組是一個(gè)不可變的序列類型,構(gòu)建好以后不可以進(jìn)行任何修改。
上述序列中的字符串已在第3章中講解,后續(xù)會(huì)在第6.2節(jié)對(duì)另外兩種序列——列表和元組做進(jìn)一步講解。
2.集合類型
數(shù)學(xué)中的集合是指具有某種特定性質(zhì)的對(duì)象匯總而成的集體,其中構(gòu)建集合的這些對(duì)象稱為該集合的元素。例如,成年人集合的每一個(gè)元素都是已滿18周歲的人。通常用大寫字母如A、B、S、……表示集合,用小寫字母如a、b、c、……表示集合的元素。集合中的元素具有三個(gè)特征,具體如下。
(1)確定性:給定一個(gè)集合,那么任何一個(gè)元素是否在集合中就確定了。例如,地球的四大洋構(gòu)成一個(gè)集合,其內(nèi)部的元素太平洋、大西洋、印度洋、北冰洋是確定的。
(2)互異性:集合中的元素互不相同。
(3)無(wú)序性:集合中的元素沒(méi)有順序,順序不同但元素相同的集合可視為同一集合。
Python集合與數(shù)學(xué)中的集合概念一致,也具備以上三個(gè)特性。Python要求放入集合中的元素必須是不可變類型,Python中的整型、浮點(diǎn)型、字符串類型和元組屬于不可變類型,列表、字典及集合本身都屬于可變的數(shù)據(jù)類型。對(duì)于所有的數(shù)據(jù)類型而言,它們只要能進(jìn)行哈希運(yùn)算,就可以作為集合中的元素出現(xiàn)。
3.映射類型
在數(shù)學(xué)中,設(shè)A、B是兩個(gè)非空集合,若按某個(gè)確定的對(duì)應(yīng)法則f,使集合A中的任意一個(gè)元素x,在集合B中都有唯一確定的元素y與之對(duì)應(yīng),則稱f為從集合A到集合B的一個(gè)映射。映射關(guān)系示例如圖3所示。
圖3 映射關(guān)系實(shí)例
映射類型也稱做可變的哈希表(散列表),哈希表是一種數(shù)據(jù)結(jié)構(gòu),表中存儲(chǔ)存在映射關(guān)系的鍵值對(duì),其中值為實(shí)際存儲(chǔ)的數(shù)據(jù),鍵為查找數(shù)據(jù)時(shí)使用的關(guān)鍵字。哈希表具有很好的查詢性能,使用鍵可以快速地定位值。
Python中同樣采用“鍵-值”這種形式存儲(chǔ)數(shù)據(jù)間的映射關(guān)系。字典是Python唯一的內(nèi)建映射類型,字典的鍵必須遵守以下兩個(gè)原則:
(1)每個(gè)鍵只能對(duì)應(yīng)一個(gè)值,不允許同一個(gè)鍵在字典中重復(fù)出現(xiàn)。
(2)字典中的鍵是不可變類型。
多學(xué)一招:哈希算法
哈希(hash,散列)算法是將任意長(zhǎng)度的二進(jìn)制值映射為固定長(zhǎng)度的較小二進(jìn)制值,這個(gè)小的二進(jìn)制值稱為哈希值。哈希值是原數(shù)據(jù)唯一且極其緊湊的數(shù)值表示形式,哪怕只更改原數(shù)據(jù)的一個(gè)字母,再次散列后產(chǎn)生的都是不同的值。若要找到散列為同一個(gè)值的兩個(gè)不同的輸入,在計(jì)算上是不可能的,所以數(shù)據(jù)的哈希值可以檢驗(yàn)數(shù)據(jù)的完整性。
Python提供了適用于哈希算法的函數(shù)hash(),該函數(shù)可以獲取大多數(shù)數(shù)據(jù)(如字符串、數(shù)字)的哈希值。例如:
>>> hash("HeiMa") 1296313009587961352 >>> hash("123456") -8765639574853590066 >>> hash("HeiMa123456") 9132461567425907503
由此看出,哈希值與哈希前的數(shù)據(jù)組合無(wú)關(guān)。
猜你喜歡:
python中轉(zhuǎn)換數(shù)據(jù)類型有什么作用?
Python常見(jiàn)的數(shù)據(jù)類型有哪些?
在Windows平臺(tái)如何安裝Python?【圖文教程】
2021-03-24Python培訓(xùn)哪家機(jī)構(gòu)好?【百度云資源】python基礎(chǔ)視頻教程下載
2021-03-23Python是如何管理內(nèi)存的?【python培訓(xùn)】
2021-03-23python難學(xué)嗎?適不適合零基礎(chǔ)學(xué)習(xí)?
2021-03-23Python培訓(xùn)機(jī)構(gòu)哪里好?Python零基礎(chǔ)教程下載【百度云資源】
2021-03-23python培訓(xùn)哪個(gè)靠譜?【點(diǎn)擊領(lǐng)取福利】python自學(xué)教程下載
2021-03-19北京校區(qū)