跟我一起認(rèn)識Python數(shù)據(jù)結(jié)構(gòu)

首先大家看到數(shù)據(jù)結(jié)構(gòu),想到了什么呢,對,我們第一要先思考數(shù)據(jù)機構(gòu)是什么?用來干什么?有什么樣的作用,那我將逐個來搜索答案,進一步清晰了解它


數(shù)據(jù)結(jié)構(gòu)是什么:

數(shù)據(jù)結(jié)構(gòu)是計算機存儲、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。

用我自個的白話組織:數(shù)據(jù)結(jié)構(gòu)是讓我們可以對數(shù)據(jù)存儲和管理的一種手段,具體讓我們可以對數(shù)據(jù)可存可取可刪可查可添等操作,就是一個小型的數(shù)據(jù)庫。


大家現(xiàn)在應(yīng)該跟我一樣簡單認(rèn)識到數(shù)據(jù)機構(gòu),那接下來我們是可以回復(fù)數(shù)據(jù)結(jié)構(gòu)是用來做什么的了,簡單來說:


數(shù)據(jù)結(jié)構(gòu)就是一種工具,一種手段,在計算機里,用其工具或者說是手段以達到對數(shù)據(jù)進行我們想要的管理以及操作,就如同我們吃飯喝水需要借助筷子和杯子等工具。


其有什么樣的作用,相信大家跟我一樣都有自己的認(rèn)識了,既然很形象的比擬成了工具跟手段,那么就其作用就是讓我們更好的對簡單數(shù)據(jù)進行管理和操作,就如同沒有筷子跟杯子,你就只能手抓/嘴舔,這里就不皮了,主要是讓我們更好的理解它。


那么我們現(xiàn)在就要了解和學(xué)習(xí)Python中有哪些數(shù)據(jù)結(jié)構(gòu)?這些數(shù)據(jù)機構(gòu)又有哪些基本操作?


Python中數(shù)據(jù)機構(gòu)有列表list、元組tuple、字典dict、集合set等,這里我們就只了解python中內(nèi)置的數(shù)據(jù)結(jié)構(gòu),下面我會從其定義以及特征和其基本操作來詳細(xì)說明:


列表list

定義:由一系列變量組成的可變序列容器(這里我把它們統(tǒng)稱為可以存儲數(shù)據(jù)的容器)

特征:

1.列表是可變的,意味著列表可以進行修改和刪除;

2.列表是有序的,每個元素都可以用索引定位,可以用索引去訪問每個元素;

3.列表中存儲的對象是變量,即為可以存儲python中任何數(shù)據(jù)類型;

基本操作:

1.創(chuàng)建列表

第一種:list01 = [2,None,"hello world",True,[2,3],(2,3)]

第二種:list02 = list(以上四種容器數(shù)據(jù))

詳細(xì)說明:第二種創(chuàng)建列表方法,里面參數(shù)可以是所有容器,如果是字典,返回是字典鍵的列表,如果要想返回完整的列表鍵值對列表則需要外嵌套除開字典的容器,具體外嵌套什么容器,根據(jù)需求而定。這里你會發(fā)現(xiàn)返回結(jié)果都將是列表數(shù)據(jù)類型,這樣一來list()就可以成為一種數(shù)據(jù)類型轉(zhuǎn)換成列表數(shù)據(jù)類型的方法,衍生一下,其他的數(shù)據(jù)結(jié)構(gòu)名都能作為相應(yīng)轉(zhuǎn)換數(shù)據(jù)類型的方法。

2.添加元素

第一種追加:append(元素)

list01 = [1,2,3]

result_list = list01.append(4)

print(result-list)

返回結(jié)果:[1,2,3,4]

詳細(xì)說明:append()方法只可以添加一個元素

第二種插入:insert(索引值,元素)

list01 = [1,2,3]

list01.insert(2,4)

print(list01)

返回結(jié)果:[1,2,3,4]

詳細(xì)說明:insert()里面的第一個參數(shù)是索引值,特別強調(diào)的是可以超出原有列表的索引值范圍,并指定為在末尾追加元素

第三種末尾追加另外三種容器以及字符/字符串:extend(list/dict/set/str)

list01 = [6,7,8]

list01.extend([9,10,11])

返回結(jié)果:[6,7,8,9,10,11]

詳細(xì)說明:參數(shù)是另外三種容器的數(shù)據(jù)以及字符/字符串,如果添加是字典,那么追加在后面的元素是字典的鍵,如果想把字典的鍵值對都添加進去,可以在字典外根據(jù)需求嵌套其他三種容器,不能添加數(shù)字?jǐn)?shù)據(jù)類型(int、float、complex)。

3.刪除元素

第一種根據(jù)切片刪除:del 列表名[切片]

list01 = [1,2,3]

del list01[1:]

print(list01)

result :[1]

第二種根據(jù)索引刪除元素:del 列表名[索引值]

list01 = [1,2,3]

del list01[1]

print(list01)

result: [1,3]

第三種根據(jù)元素刪除元素:remove(元素)

list01 = [1,2,3]

list01.remove(2)

print(list01)

result:[1,3]

第四種根據(jù)索引值刪除元素:pop(索引值)

list01 = [1,2,3]

list01.pop(1)

print(list01)

result:[1,3]

詳細(xì)說明:pop()不給參數(shù)時,被調(diào)用時默認(rèn)刪除列表最后一個元素

4.修改元素

第一種根據(jù)切片添加:list[1:2] = 元素/其他三種容器數(shù)據(jù)

list01 = [1,2,3]

list01[1:2] = [1,2,3]

print(list01)

返回結(jié)果:[1,1,2,3,3]

詳細(xì)說明:這里切片的范圍,就是你想修改元素的索引范圍或者是定位某個元素

第二種根據(jù)索引值修改:列表名[索引值] = 元素

list01 = [1,2,3]

list01[2] = 4

print(list01)

result:[1,2,4]

5.遍歷元素

list01 = [1,2,3,4]

for item in list01:

? ? print(item,end=" ")

result:1 2 3 4

6.提取元素

利用切片提取元素

list01 = [1,2,3]

result_list = list01[1:]

print(result_list)

result:[2,3]

7.排序列表

第一種升序:列表名.sort()

list01 = [1,6,3]

list01.sort()

print(list01)

result:[1,3,6]

第二種列表反轉(zhuǎn):列表名.reverse()

list01 = [1,5,4]

list01.reverse()

print(list01)

result:[4,5,1]

第三種列表元素倒序:列表名.sort(reverse = True)

list01 = [3,1,2,5]

list01.sort(reverse = True)

print(list01)

result:[5,3,2,1]


列表到這里就結(jié)束了,接下來就是元組了


元組tuple

定義:由一系列變量組成的不可變序列容器。

詳細(xì)說明:比較與列表的定義的不同之處,很容易發(fā)現(xiàn),列表是可變而元組是不可變的。

特征:因為是不可變,所以一但創(chuàng)建,不可以再添加/刪除/修改元素。

基本操作:

1.元組創(chuàng)建

第一種空元組創(chuàng)建:元組名 = ( )/ 元組名 = tuple()

第二種非空元組創(chuàng)建: 元組名 = (元素1,)/ 元組名 = 元素1,元素2/ 元組名 = tuple(可迭代對象)

2.獲取元素

根據(jù)索引跟切片,具體跟列表很類似,具體我就不例子

3.遍歷元組

依然還是一樣的,用for循環(huán)來遍歷,也跟列表類似


字典dict

定義:由一系列鍵值對組成的可變映射容器。

特征:

1.字典中的數(shù)據(jù)必須以鍵值對的形式出現(xiàn),key(鍵):必須是可哈希的值,比如int、string、float、tuple,但是list,set,dict不行 。value(值):可以為任何值(任何對象的數(shù)據(jù))

2.鍵不可重復(fù),值可重復(fù)

3.字典中鍵(key)是不可變的,何為不可變對象,不能進行修改;而值(value)是可以修改的,可以是任何對象。在dict中是根據(jù)key來計算value的存儲位置,如果每次計算相同的key得出的值(value)結(jié)果不同,那dict內(nèi)部就完全混亂了。

基本操作:

1.字典的創(chuàng)建:

第一種:字典名 = {鍵1:值1,鍵2:值2}

第二種:字典名 = dict (可迭代對象)

2. 添加/修改元素:字典名[鍵] = 數(shù)據(jù)

詳細(xì)說明: ? ? 鍵不存在,創(chuàng)建記錄。 ? ? 鍵存在,修改映射關(guān)系。通俗點講就是需要判定鍵是否存在,如果存在就是修改元素,如果沒有存在,那么就是在字典里添加新的元素

3. 獲取元素: 變量 = 字典名[鍵]

4. 遍歷字典:

一:for 鍵名 in 字典名:

? ? ? ? ? ? ? 字典名[鍵名]

二:for 鍵名,值名 in 字典名.items():

? ? ? ? ? ? ? ? 語句

5.刪除元素: del 字典名[鍵]

6.清空字典:字典名.clear()


集合set

定義:由一系列不重復(fù)的不可變類型變量組成的可變映射容器。

特征:

1.集合更接近數(shù)學(xué)上集合的概念。集合中每個元素都是無序的、不重復(fù)的任意對象。

2.可以通過集合去判斷數(shù)據(jù)的從屬關(guān)系,也可以通過集合把數(shù)據(jù)結(jié)構(gòu)中重復(fù)的元素減掉。集合可做集合運算,可添加和刪除元素。

3.集合內(nèi)數(shù)據(jù)無序,即無法使用索引和分片

4.集合內(nèi)部數(shù)據(jù)元素具有唯一性,可以用來排除重復(fù)數(shù)據(jù)

5.集合內(nèi)的數(shù)據(jù):str,int,float,tuple,冰凍集合等,即內(nèi)部只能放置可哈希數(shù)據(jù)

基本操作:

1.創(chuàng)建空集合:

集合名 =set()

集合名 =set(可迭代對象)

2.添加元素:集合名.add(元素)

3.刪除元素:集合名.discard(元素)/集合名.remove(元素)


集合除了基本操作,最多是關(guān)心它的數(shù)學(xué)運算,下面我們就來說說運算吧

1.交集&:返回共同元素。

s1 = {1, 2, 3}

s2 = {2, 3, 4}

s3 = s1 & s2

result:{2, 3}

2. 并集:返回不重復(fù)元素

s1 = {1, 2, 3}

s2 = {2, 3, 4}

s3 = s1 | s2

result: {1, 2, 3, 4}

3. 補集-:返回只屬于其中之一的元素

s1 = {1, 2, 3}

s2 = {2, 3, 4}

s1 - s2

# {1} 屬于s1但不屬于s2

補集^:返回不同的的元素

s1 = {1, 2, 3}

s2 = {2, 3, 4}

s3 = s1 ^ s2

# {1, 4} 等同于(s1-s2 | s2-s1)

4. 子集<:判斷一個集合的所有元素是否完全在另一個集合中

5. 超集>:判斷一個集合是否具有另一個集合的所有元素

s1 = {1, 2, 3}

s2 = {2, 3}

s2 < s1 # True? ?

s1 > s2 # True


以上就是我總結(jié)的一些python內(nèi)部數(shù)據(jù)結(jié)構(gòu)的基本知識內(nèi)容,有些地方寫得不好,多多包涵,如有錯誤,歡迎指出,大家共同學(xué)習(xí)進步?。?!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容