首先大家看到數(shù)據(jù)結(jié)構(gòu),想到了什么呢,對(duì),我們第一要先思考數(shù)據(jù)機(jī)構(gòu)是什么?用來干什么?有什么樣的作用,那我將逐個(gè)來搜索答案,進(jìn)一步清晰了解它
數(shù)據(jù)結(jié)構(gòu)是什么:
數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。
用我自個(gè)的白話組織:數(shù)據(jù)結(jié)構(gòu)是讓我們可以對(duì)數(shù)據(jù)存儲(chǔ)和管理的一種手段,具體讓我們可以對(duì)數(shù)據(jù)可存可取可刪可查可添等操作,就是一個(gè)小型的數(shù)據(jù)庫。
大家現(xiàn)在應(yīng)該跟我一樣簡(jiǎn)單認(rèn)識(shí)到數(shù)據(jù)機(jī)構(gòu),那接下來我們是可以回復(fù)數(shù)據(jù)結(jié)構(gòu)是用來做什么的了,簡(jiǎn)單來說:
數(shù)據(jù)結(jié)構(gòu)就是一種工具,一種手段,在計(jì)算機(jī)里,用其工具或者說是手段以達(dá)到對(duì)數(shù)據(jù)進(jìn)行我們想要的管理以及操作,就如同我們吃飯喝水需要借助筷子和杯子等工具。
其有什么樣的作用,相信大家跟我一樣都有自己的認(rèn)識(shí)了,既然很形象的比擬成了工具跟手段,那么就其作用就是讓我們更好的對(duì)簡(jiǎn)單數(shù)據(jù)進(jìn)行管理和操作,就如同沒有筷子跟杯子,你就只能手抓/嘴舔,這里就不皮了,主要是讓我們更好的理解它。
那么我們現(xiàn)在就要了解和學(xué)習(xí)Python中有哪些數(shù)據(jù)結(jié)構(gòu)?這些數(shù)據(jù)機(jī)構(gòu)又有哪些基本操作?
Python中數(shù)據(jù)機(jī)構(gòu)有列表list、元組tuple、字典dict、集合set等,這里我們就只了解python中內(nèi)置的數(shù)據(jù)結(jié)構(gòu),下面我會(huì)從其定義以及特征和其基本操作來詳細(xì)說明:
列表list
定義:由一系列變量組成的可變序列容器(這里我把它們統(tǒng)稱為可以存儲(chǔ)數(shù)據(jù)的容器)
特征:
1.列表是可變的,意味著列表可以進(jìn)行修改和刪除;
2.列表是有序的,每個(gè)元素都可以用索引定位,可以用索引去訪問每個(gè)元素;
3.列表中存儲(chǔ)的對(duì)象是變量,即為可以存儲(chǔ)python中任何數(shù)據(jù)類型;
基本操作:
1.創(chuàng)建列表
第一種:list01 = [2,None,"hello world",True,[2,3],(2,3)]
第二種:list02 = list(以上四種容器數(shù)據(jù))
詳細(xì)說明:第二種創(chuàng)建列表方法,里面參數(shù)可以是所有容器,如果是字典,返回是字典鍵的列表,如果要想返回完整的列表鍵值對(duì)列表則需要外嵌套除開字典的容器,具體外嵌套什么容器,根據(jù)需求而定。這里你會(huì)發(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()方法只可以添加一個(gè)元素
第二種插入:insert(索引值,元素)
list01 = [1,2,3]
list01.insert(2,4)
print(list01)
返回結(jié)果:[1,2,3,4]
詳細(xì)說明:insert()里面的第一個(gè)參數(shù)是索引值,特別強(qiáng)調(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ù)以及字符/字符串,如果添加是字典,那么追加在后面的元素是字典的鍵,如果想把字典的鍵值對(duì)都添加進(jìn)去,可以在字典外根據(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ù)時(shí),被調(diào)用時(shí)默認(rèn)刪除列表最后一個(gè)元素
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ì)說明:這里切片的范圍,就是你想修改元素的索引范圍或者是定位某個(gè)元素
第二種根據(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),列表是可變而元組是不可變的。
特征:因?yàn)槭遣豢勺儯砸坏珓?chuàng)建,不可以再添加/刪除/修改元素。
基本操作:
1.元組創(chuàng)建
第一種空元組創(chuàng)建:元組名 = ( )/ 元組名 = tuple()
第二種非空元組創(chuàng)建: 元組名 = (元素1,)/ 元組名 = 元素1,元素2/ 元組名 = tuple(可迭代對(duì)象)
2.獲取元素
根據(jù)索引跟切片,具體跟列表很類似,具體我就不例子
3.遍歷元組
依然還是一樣的,用for循環(huán)來遍歷,也跟列表類似
字典dict
定義:由一系列鍵值對(duì)組成的可變映射容器。
特征:
1.字典中的數(shù)據(jù)必須以鍵值對(duì)的形式出現(xiàn),key(鍵):必須是可哈希的值,比如int、string、float、tuple,但是list,set,dict不行 。value(值):可以為任何值(任何對(duì)象的數(shù)據(jù))
2.鍵不可重復(fù),值可重復(fù)
3.字典中鍵(key)是不可變的,何為不可變對(duì)象,不能進(jìn)行修改;而值(value)是可以修改的,可以是任何對(duì)象。在dict中是根據(jù)key來計(jì)算value的存儲(chǔ)位置,如果每次計(jì)算相同的key得出的值(value)結(jié)果不同,那dict內(nèi)部就完全混亂了。
基本操作:
1.字典的創(chuàng)建:
第一種:字典名 = {鍵1:值1,鍵2:值2}
第二種:字典名 = dict (可迭代對(duì)象)
2. 添加/修改元素:字典名[鍵] = 數(shù)據(jù)
詳細(xì)說明: ? ? 鍵不存在,創(chuàng)建記錄。 ? ? 鍵存在,修改映射關(guān)系。通俗點(diǎn)講就是需要判定鍵是否存在,如果存在就是修改元素,如果沒有存在,那么就是在字典里添加新的元素
3. 獲取元素: 變量 = 字典名[鍵]
4. 遍歷字典:
一:for 鍵名 in 字典名:
? ? ? ? ? ? ? 字典名[鍵名]
二:for 鍵名,值名 in 字典名.items():
? ? ? ? ? ? ? ? 語句
5.刪除元素: del 字典名[鍵]
6.清空字典:字典名.clear()
集合set
定義:由一系列不重復(fù)的不可變類型變量組成的可變映射容器。
特征:
1.集合更接近數(shù)學(xué)上集合的概念。集合中每個(gè)元素都是無序的、不重復(fù)的任意對(duì)象。
2.可以通過集合去判斷數(shù)據(jù)的從屬關(guān)系,也可以通過集合把數(shù)據(jù)結(jié)構(gòu)中重復(fù)的元素減掉。集合可做集合運(yùn)算,可添加和刪除元素。
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(可迭代對(duì)象)
2.添加元素:集合名.add(元素)
3.刪除元素:集合名.discard(元素)/集合名.remove(元素)
集合除了基本操作,最多是關(guān)心它的數(shù)學(xué)運(yùn)算,下面我們就來說說運(yùn)算吧
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. 補(bǔ)集-:返回只屬于其中之一的元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1 - s2
# {1} 屬于s1但不屬于s2
補(bǔ)集^:返回不同的的元素
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = s1 ^ s2
# {1, 4} 等同于(s1-s2 | s2-s1)
4. 子集<:判斷一個(gè)集合的所有元素是否完全在另一個(gè)集合中
5. 超集>:判斷一個(gè)集合是否具有另一個(gè)集合的所有元素
s1 = {1, 2, 3}
s2 = {2, 3}
s2 < s1 # True? ?
s1 > s2 # True
以上就是我總結(jié)的一些python內(nèi)部數(shù)據(jù)結(jié)構(gòu)的基本知識(shí)內(nèi)容,有些地方寫得不好,多多包涵,如有錯(cuò)誤,歡迎指出,大家共同學(xué)習(xí)進(jìn)步!!!