跟我一起認識Python數據結構

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


數據結構是什么:

數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。

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


大家現在應該跟我一樣簡單認識到數據機構,那接下來我們是可以回復數據結構是用來做什么的了,簡單來說:


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


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


那么我們現在就要了解和學習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內部數據結構的基本知識內容,有些地方寫得不好,多多包涵,如有錯誤,歡迎指出,大家共同學習進步!!!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370