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