這篇文章簡單的說一下python的資料結構。我也是初學者有些地方可能不夠深入。
簡介
我們這裡提到的資料結構為将資料以某種結構存儲,便于我們的程式能夠很好的處理。如果你學過資料結構,或者了解java。你将會知道常見的資料結構有:
- 數組(Array)特點:1、一旦在記憶體中請求建立空間後,配置設定的空間大小不能調整,否則會出現資料溢出的情況。2、具有資料連續性的表現,中間的資料不能随意删除修改。(需要下标來控制)3、程式在運作的時候不會檢查數組下标,會存在數組越界的風險。
注 數組:優點是插入快,如果知道下标,可以非常快地存取。缺點是查找慢,删除慢,大小固定。有序數組:優點是比無序的資料查找快。缺點是删除和插入慢,大小固定。
- 堆棧 (Stack) 特點:1、隻能允許在堆棧的一端進行推入,彈出操作的(線性的)。優點是提供後進先出方式的存取。缺點是存取其他項很慢。
- 隊列(queue)特點:1、先進先出,隻允許在後端進行插入操作,在前端進行删除操作。2、操作方式和堆棧類似,但是隊列隻允許在後端插入資料。提供先進先出方式的存取。缺點是存取其他項很慢。
- 連結清單 (list) 特點:1、可以動态開辟空間。2、和數組相比不能随機讀取,每一次讀取資料都需要循環疊代,時間複雜度較高。優點是插入快,删除快。缺點是查找慢
- 樹(tree)特點:1、每個節點有0個或多給子節點。2、沒有前驅的結點稱為根結點。3、每一個非根結點有且隻有一個父結點。除了根結點外,每個子結點可以分為m個不相交的子樹。關于樹延伸起來就很多,各種資料的查找,删除,操作。這裡就不多說了
- 圖 (Graph) 特點:1、優點是對現實世界模組化。缺點是有些算法且複雜
- 堆(heap) 特點:1、堆中某個節點的值總是不大于或不小于其父節點的值;2、堆總是一棵完全樹 優點是插入、删除快,對最大資料項的存取很快。缺點是對其他資料項存取慢。
- 散清單(hash) 特點:1、是根據關鍵字(Key value)而直接進行通路的資料結構。優點是如果關鍵字已知則存取極快。插入快。缺點是删除慢,如果不知道關鍵字則存取很慢,對存儲空間使用不充分
python的資料結構:
1.清單
上面說了一些常見的資料結構的一些特點,以及優缺點。接下來看看python中的資料結構。我們從資料的存儲,以及輸出來分析
>>> shoplist = ["apple","mango","carrot","banana"]
>>> print len(shoplist)
4
>>> for item in shoplist:
print item,
apple mango carrot banana
>>> shoplist.sort()
>>> print shoplist
['apple', 'banana', 'carrot', 'mango']
>>> shoplist.append("rice")
>>> print shoplist
['apple', 'banana', 'carrot', 'mango', 'rice']
>>> del shoplist[0]
>>> print shoplist
['banana', 'carrot', 'mango', 'rice']
>>>
在python中把第一行定義的這種資料結構叫做清單。一旦你建立了一個清單,你可以添加、删除或是搜尋清單中的項目。由于你可以增加或删除項目,我們說清單是 可變的 資料類型,即這種類型是可以被改變的。(這裡是不是很靈活,可以通過下标來通路,删除資料。并且可以增加資料。)
可以通過指令help(list)來檢視python對list實作了那些方法。
2、元組
>>> zoo = ("wolf","elephant","penguin")
>>> print len(zoo)
3
>>> new_zoo = ("monkey","dolphin",zoo)
>>> print new_zoo[2]
('wolf', 'elephant', 'penguin')
>>> print new_zoo[2][2]
penguin
>>>
變量zoo是一個元組,我們看到len函數可以用來擷取元組的長度。這也表明元組也是一個序列。我們在new_zoo 中放置了zoo,但是zoo還是通過下标可以通路的。這說明元組在元組中是不會失去身份的。
空的元組用 zoo=(),但是一個元素的元組應該用zoo=("animail",),需要在後面跟一個逗号。
3、字典
>>> ab ={ "swaroop" : "[email protected]",
"larry" : "[email protected]",
"matsumoto" : "[email protected]",
}
>>> print ab["swaroop"]
[email protected]
>>>
>>> del ab["swaroop"]
>>> len(ab)
2
>>> for name,addressin ab.items():
SyntaxError: invalid syntax
>>> for name,address in ab.items() :
print (name,address)
('matsumoto', '[email protected]')
('larry', '[email protected]')
>>>
這種字典資料結構類似于json的資料格式,通過key/value鍵值對的方式來操作資料。你可以使用help(dict)來檢視dict類的完整方法清單
4、使用序列
清單、元組和字元串都是序列,但是序列是什麼,它們為什麼如此特别呢?序列的兩個主要特點是索引操作符和切片操作符。索引操作符讓我們可以從序列中抓取一個特定項目。切片操作符讓我們能夠擷取序列的一個切片,即一部分序
>>> shoplist = ['apple', 'mango', 'carrot', 'banana']
>>> print shoplist[1:3]
['mango', 'carrot']
>>> print shoplist[1:-1]
['mango', 'carrot']
>>> print shoplist[:]
['apple', 'mango', 'carrot', 'banana']
>>>
首先,我們來學習如何使用索引來取得序列中的單個項目。這也被稱作是下标操作。每當你用方括号中的一個數來指定一個序列的時候,Python會為你抓取序列中對應位置的項目。記住,Python從0開始計數。是以,shoplist[0]抓取第一個項目,shoplist[3]抓取shoplist序列中的第四個元素。
索引同樣可以是負數,在那樣的情況下,位置是從序列尾開始計算的。是以,shoplist[-1]表示序列的最後一個元素而shoplist[-2]抓取序列的倒數第二個項目。序列的神奇之處在于你可以用相同的方法通路元組、清單和字元串
4、對象與參考
當你建立一個對象并給它賦一個變量的時候,這個變量僅僅 參考 那個對象,而不是表示這個對象本身!也就是說,變量名指向你計算機中存儲那個對象的記憶體。這被稱作名稱到對象的綁定。
>>> shoplist = ['apple', 'mango', 'carrot', 'banana']
>>> mylist = shoplist
>>> del shoplist[0]
>>> print shoplist
['mango', 'carrot', 'banana']
>>> print mylist
['mango', 'carrot', 'banana']
>>> mylist = shoplist[:]
>>> del mylist[0]
>>> print shoplist
['mango', 'carrot', 'banana']
>>> print mylist
['carrot', 'banana']
你需要記住的隻是如果你想要複制一個清單或者類似的序列或者其他複雜的對象(不是如整數那樣的簡單 對象 ),那麼你必須使用切片操作符來取得拷貝。如果你隻是想要使用另一個變量名,兩個名稱都 參考 同一個對象,那麼如果你不小心的話,可能會引來各種麻煩。
5、字元串的方法
>>> name ="guopeng"
>>> if name.startswith('guo') :
print 'yes'
yes
>>> if 'u' in name :
print 'yes'
yes
>>> if name.find('uop') != -1 :
print 'yes'
yes
>>> delimiter = "_*_"
>>> mylist = ["guo","pem","indei"]
>>> print delimiter.join(mylist)
guo_*_pem_*_indei
>>>
版權聲明:本文為CSDN部落客「weixin_34050519」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。
原文連結:https://blog.csdn.net/weixin_34050519/article/details/92013969