教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

組合數(shù)據(jù)類型有幾類?各種類型特點(diǎn)是什么?

更新時(shí)間:2021年04月01日15時(shí)11分 來源:傳智教育 瀏覽次數(shù):

傳智教育-一樣的教育,不一樣的品質(zhì)


組合數(shù)據(jù)類型可以將多個(gè)數(shù)據(jù)組織起來,根據(jù)數(shù)據(jù)組織方式的不同,Python的組合數(shù)據(jù)類型可分成三類:序列類型、集合類型和映射類型,如圖1所示。

1617259960916_1.jpg

圖1 組合數(shù)據(jù)類型的分類

下面對(duì)圖1中的這三種類型進(jìn)行介紹。

(1)序列存儲(chǔ)一組排列有序的元素,每個(gè)元素的類型可以不同,通過索引可以鎖定序列中的指定元素。

(2)集合同樣存儲(chǔ)一組數(shù)據(jù),它要求其中的數(shù)據(jù)必須唯一,但不要求數(shù)據(jù)間有序。

(3)映射類型的數(shù)據(jù)中存儲(chǔ)的每個(gè)元素都是一個(gè)鍵值對(duì),通過鍵值對(duì)的鍵可以迅速獲得對(duì)應(yīng)的值。

1.序列類型

序列類型來源于數(shù)學(xué)概念中的數(shù)列。數(shù)列是按一定順序排成一列的一組數(shù),每個(gè)數(shù)稱為這個(gè)數(shù)列的項(xiàng),每項(xiàng)不是在其它項(xiàng)之前,就是在其它項(xiàng)之后。存儲(chǔ)n項(xiàng)元素的數(shù)列{an}的定義如下:


1617259955344_2.png

需要注意的是,數(shù)列的索引從0開始。通過索引i可以訪問數(shù)列中的第i-1項(xiàng),例如通過s1可獲取數(shù)列{Sn}中的第2項(xiàng)。

序列類型在數(shù)列的基礎(chǔ)上進(jìn)行了拓展,Python中的序列支持雙向索引:正向遞增索引和反向遞減索引,如圖2所示。

1617259943840_3.jpg

圖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)無序性:集合中的元素沒有順序,順序不同但元素相同的集合可視為同一集合。

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所示。

1617259929954_4.jpg

圖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,散列)算法是將任意長度的二進(jìn)制值映射為固定長度的較小二進(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ù)組合無關(guān)。



猜你喜歡:

python中轉(zhuǎn)換數(shù)據(jù)類型有什么作用?

Python常見的數(shù)據(jù)類型有哪些?

Python不同數(shù)據(jù)類型可以相互轉(zhuǎn)換嗎?

傳智教育Python+數(shù)據(jù)分析培訓(xùn)

0 分享到:
和我們?cè)诰€交談!