編程語言中的數(shù)據(jù)結(jié)構(gòu)是用來整理和存儲(chǔ)數(shù)據(jù)。數(shù)據(jù)結(jié)構(gòu)自身內(nèi)部就定義了很多方法用來處理數(shù)據(jù),不同的數(shù)據(jù)結(jié)構(gòu)擁有不能的優(yōu)勢,這篇文章就大概的過一遍Python中非常重要的數(shù)據(jù)結(jié)構(gòu)。
首先,一定要明確一點(diǎn),數(shù)據(jù)結(jié)構(gòu)的選擇是基于對數(shù)據(jù)和項(xiàng)目最終目的的整體考量。不合適的數(shù)據(jù)結(jié)構(gòu)可能會(huì)導(dǎo)致更長的處理時(shí)間、更多的內(nèi)存占用等等。
Python中用途最廣泛的數(shù)據(jù)結(jié)構(gòu)有以下幾種:
我們一起來過一遍tuple和set使用方法吧!
tuple這個(gè)數(shù)據(jù)結(jié)構(gòu)是被小括號(hào)包圍的一組數(shù)據(jù),并且它有一個(gè)重要的屬性,一旦被定義,不可以被更改。
tuple元組的定義
圖1
如圖1所示,我們定義了兩個(gè)變量a和b,至于區(qū)別只是b的數(shù)據(jù)后面加了一個(gè)逗號(hào)。如果不加逗號(hào),a的 數(shù)據(jù)類型被定義成了整數(shù)型。加了逗號(hào),Python則會(huì)默認(rèn)將數(shù)據(jù)類型設(shè)置為tuple。在圖2中,展示了幾種常用的定義tuple的方法。
圖2
圖3
len()函數(shù)可以返回tuple數(shù)據(jù)結(jié)構(gòu)中一共有多少個(gè)數(shù)據(jù),我們注意到tuple數(shù)據(jù)結(jié)構(gòu)中并不需要所有的數(shù)據(jù)格式是一樣的。使用print()將tuple元組的數(shù)據(jù)個(gè)數(shù)打印出來,并且通過a[i]的形式調(diào)用每一個(gè)數(shù)據(jù)。
a[i]中的下標(biāo)i是從0開始的,也就是說a中的1,2,‘逃學(xué)博士’分別對應(yīng)的下標(biāo)為0,1,2。
tuple數(shù)據(jù)一旦創(chuàng)建,無法更改
繼續(xù)拿a舉例,如果我們想要改變tuple a中的數(shù)據(jù),比方說a[0],我們是不是可以這么做呢?
圖4
我們試圖將數(shù)值5賦值給a[0],但是系統(tǒng)報(bào)錯(cuò)顯示tuple不支持賦值,也就是a[0]無法被修改。這也是tuple最重要的屬性之一,tuple的好處就是數(shù)據(jù)安全性高。
tuple數(shù)據(jù)一旦創(chuàng)建,真的不能修改嗎?
其實(shí),tuple的數(shù)據(jù)無法修改也不是百分之百的。如圖5
圖6
a中的最后一個(gè)數(shù)據(jù)為list,a[2][0]則會(huì)指定為‘逃學(xué)博士’。如果對a[2][0]進(jìn)行賦值,我們發(fā)現(xiàn)tuple 元組a的數(shù)據(jù)變了。原因在于我們無法直接賦值給a[2],因?yàn)閍[2]是元組a的數(shù)據(jù)。但是,a[2]是一個(gè)list,而list的數(shù)據(jù)是可以被修改的,因此調(diào)用a[2][0]是可以直接修改list里面的內(nèi)容。
集合set是用大括號(hào)將數(shù)據(jù)包裹起來,如圖7所示。
圖7
那么,集合set最重要的屬性是什么呢?集合set中是無法包含重復(fù)的數(shù)據(jù)。如圖8,我們先定義一個(gè)list [1, 2, 3, 4, 1, 2, 3]。其中1, 2, 3是重復(fù)出現(xiàn)的。如果有一個(gè)項(xiàng)目需要我們?nèi)ゲ檎疫@個(gè)數(shù)據(jù)中一共出現(xiàn)的多少個(gè)數(shù)據(jù),不包括重復(fù)的,就可以用到set集合了。
圖8
向集合set中添加和刪除數(shù)據(jù)是被允許的。添加數(shù)據(jù)使用add()函數(shù),刪除函數(shù)使用remove()函數(shù)。
圖9
圖9中,我們給集合b添加了兩次數(shù)據(jù)5。但是,由于set無法擁有兩個(gè)重復(fù)的數(shù)據(jù)。因此,第二次被忽略了,而且系統(tǒng)不會(huì)報(bào)錯(cuò)。
圖10
調(diào)用remove()函數(shù),我們第一次調(diào)用去掉了集合b中的數(shù)字5。但是第二次調(diào)用remove()系統(tǒng)顯示報(bào)錯(cuò),這是因?yàn)榧蟗中這時(shí)候已經(jīng)沒有我們要去除的5了。
數(shù)據(jù)結(jié)構(gòu)還有很多,集合set和元組tuple中的調(diào)用方法也還有很多。這篇文章想說的是幾個(gè)要注意的比較有意思的點(diǎn)。謝謝大家耐心的看完。
聯(lián)系客服