詳解python的四種內(nèi)置數(shù)據(jù)結(jié)構(gòu)
對(duì)于每種編程語言一般都會(huì)規(guī)定一些容器來保存某些數(shù)據(jù),就像java的集合和數(shù)組一樣python也同樣有這樣的結(jié)構(gòu)
而對(duì)于python他有四個(gè)這樣的內(nèi)置容器來存儲(chǔ)數(shù)據(jù),他們都是python語言的一部分可以直接使用而無需額外的導(dǎo)入
一.列表(list)
列表一種跟java和c中的數(shù)據(jù)很像的一種數(shù)據(jù)結(jié)構(gòu),他都是保存一系列相似,且有序元素的集合,不過不同的是列表中的元素可以不是同一種數(shù)據(jù)類型,且列表的長度是可變的
可以動(dòng)態(tài)的增加可減少這一點(diǎn)則有點(diǎn)像java中的stringBuilder對(duì)象,列表中有一點(diǎn)值得注意的是在對(duì)列表進(jìn)行復(fù)制是,不能簡單的使用賦值語句,這樣會(huì)使得兩個(gè)變量同時(shí)指向一個(gè)列表,當(dāng)一個(gè)改變時(shí)另一個(gè)變量的值也會(huì)改變,正確的復(fù)制方法是用copy()方法來進(jìn)行復(fù)制
關(guān)于一個(gè)存儲(chǔ)結(jié)構(gòu)增刪查看則其必備的功能:
1.列表元素的增加
- append的方法是將所要加的元素直接加到先前列表的末尾的方法,在增加的同時(shí)還會(huì)使得列表得長度增加
- extend方法是將一個(gè)列表中得所有元素加拓展到另一個(gè)列表的末尾將兩個(gè)列表合并為一個(gè)列表
- insert方法是將一個(gè)元素插入到指定的位置,但是值得注意的是insert方法不能插到列表的末尾
2.列表元素的刪除
- remove刪除列表中指定的值,如果列表中沒有remove參數(shù)中指定的值解釋器將會(huì)報(bào)錯(cuò)
- pop刪除指定索引位置對(duì)應(yīng)的對(duì)象,如果pop方法中沒有參數(shù)是則其默認(rèn)的是刪除列表的最后的一個(gè)對(duì)象,該方法的返回值就是對(duì)應(yīng)刪除的對(duì)象,若其指定的索不存在 時(shí)解釋器同樣會(huì)報(bào)錯(cuò)
下面通過一個(gè)簡單的例子來說明以上方法的使用:
#在 Don't panic變?yōu)?on tap phrase="Don't panic" plist=list(phrase) #將phrase表示的字符串轉(zhuǎn)化為列表 print(phrase) #將該字符串輸出 print(plist) #結(jié)果為['D', 'o', 'n', "'", 't', ' ', 'p', 'a', 'n', 'i', 'c'] plist.remove("'") #將‘在列表中刪除 for i in range(3): plist.pop() #將列表末尾的3個(gè)字符給刪除,'n','i','c' plist.pop(0) #將plist中索引對(duì)應(yīng)的對(duì)象刪除,也就是D #此時(shí)list中的值為['o', 'n', 't', ' ', 'p', 'a'] plist.extend([plist.pop(5),plist.pop(4)]) #將p和a的位置交換 plist.insert(2,plist.pop(3)) #將空格插入到對(duì)應(yīng)索引為2的對(duì)象前 phrase =''.join(plist) #將列表轉(zhuǎn)化為字符串 print(phrase)
3.列表元素的查看:
值得說明的是列表的查看和數(shù)組相似,都支持下標(biāo)查看不過不同的是列表的查看功能比數(shù)組更多
- a.中括號(hào)加下標(biāo)可以查看列表中的任意元素且元素的下標(biāo)也都是從0開始的,這點(diǎn)與數(shù)組相同,但不同的是數(shù)組中的下標(biāo)不能為負(fù)數(shù),而列表可以其表示的是從右到左,而正數(shù)則是從左到右
- b.列表中支持切片查看,也就是查看某一段元素其用法為:list[開始位置:結(jié)束位置:步長]其中所有元素都可以省,只需要在括號(hào)中有一個(gè)元素即可例如:
- list[: :2]表示開始為0,結(jié)束為列表尾,步長為2
下面我們?nèi)稳灰砸欢魏唵蔚拇a來展示其用法:
#在 Don't panic變?yōu)?on tap phrase="Don't panic" plist=list(phrase) new_phase=''.join(plist[1:3])#在列表中截取on print(new_phase) new_phase=new_phase+''.join([plist[5],plist[4],plist[7],plist[6]]) #切片的實(shí)例,以及負(fù)數(shù) plist[-1] # c temp =plist[5:1:-1] #[' ', 't', "'", 'n']當(dāng)步長為負(fù)數(shù)時(shí)其結(jié)果時(shí)從右到左遍歷 temp2=plist[::2]#['D', 'n', 't', 'p', 'n', 'c'],從頭遍歷到尾步長為2
事實(shí)上對(duì)于存儲(chǔ)類似對(duì)象的時(shí)候我們一般是使用列表,而對(duì)于那種有結(jié)構(gòu)的數(shù)據(jù)是列表就顯得不那么實(shí)用了因?yàn)榱斜砗茈y存儲(chǔ)數(shù)據(jù)之間的結(jié)構(gòu)
所以對(duì)于那種結(jié)構(gòu)化的數(shù)據(jù)我們一般采用字典來存儲(chǔ)
二.字典(dict)
字典使用來保存一個(gè)鍵值對(duì)集合,其中每個(gè)唯一的鍵都有一個(gè)與之對(duì)應(yīng)的值,通常我們把字典稱為關(guān)聯(lián)數(shù)組,如果你學(xué)過java的那么對(duì)字典就不會(huì)陌生了因?yàn)樗鋵?shí)就是java中的set集合,python的字典是無序的它不會(huì)保留你插入時(shí)的順序,同時(shí)由于字典使用的是一種高度優(yōu)化的散列算法所以即使是沒有順序字典一樣能快速的訪問與一個(gè)鍵相關(guān)的值
1字典的定義:
其結(jié)構(gòu)為{鍵1:值1,鍵2:值2},可以看出字典的開始和結(jié)束都是用大括號(hào)鍵和值用冒號(hào)隔開,不同鍵值對(duì)之間用逗號(hào)分隔,其中值可以為列表,另一個(gè)字典
2字典的增加:
字典時(shí)一個(gè)動(dòng)態(tài)的集合他可以在鍵對(duì)不存在時(shí)插入新的鍵值對(duì),但是字典中鍵必須進(jìn)行初始化后才可以引用例如:在一個(gè)商店中你不知到你的商店中的蘋果又沒有時(shí)
你不可以直接的使用蘋果這個(gè)值而當(dāng)你像添加時(shí)也需要查明商店中是否有這樣物品,對(duì)于字典則無需這樣。因?yàn)樽值湟呀?jīng)分裝好了一個(gè)setdefault()方法只需直接調(diào)用即可
下面用一段簡單代碼展示:
#字典的添加鍵值對(duì) fruit={} #當(dāng)直接使用不存在的鍵值對(duì)時(shí) fruit['apple']+=1 #沒有對(duì)該鍵初始化而直接使用會(huì)出現(xiàn)keyError #當(dāng)不使用setdefault方法時(shí)動(dòng)態(tài)的增加鍵值對(duì) if 'apple' not in fruit: fruit['apple']=0 #初始化鍵值 fruit['apple']+=1 #增加蘋果的量 print(fruit['apple']) #使用setdefault時(shí),其實(shí)就是設(shè)置一個(gè)默認(rèn)值,確保使用時(shí)這個(gè)使用的鍵存在即可 fruit.setdefault('apple',0)#當(dāng)鍵存在時(shí)這個(gè)語句沒有任何作用,相當(dāng)于上面選擇的分裝 fruit['apple']+=1 print(fruit['apple'])
3字典的遍歷:
對(duì)于一個(gè)集合來說我們一般都會(huì)采用集合來遍歷其中的所有元素但是對(duì)于字典來說單單只用循環(huán)的話并不夠方便因?yàn)閮H僅只用循環(huán)的話解釋器只會(huì)處理字典的鍵
對(duì)于其值任然需要用鍵來查值,對(duì)于這種問題python提供了一個(gè)items()的方法使得可以直接使用循環(huán)變量來訪問字典的鍵和值
下面通過一段簡單的代碼說明:
fruit={'apple':10,'pears':5,'bananas':20,'orange':4} #直接使用for循環(huán)遍歷 for i in fruit: print("種類",i,"數(shù)量",fruit[i]) #使用items方法遍歷 for i,v in fruit.items(): print("種類",i,"數(shù)量",v)
4字典的元素刪除:
python的字典刪除有三種方法,一種是clear()是刪除字典中的所有元素,二是pop()根據(jù)pop中的參數(shù)刪除與其鍵相同的鍵值對(duì),三是popitem()隨機(jī)刪除字典中的元素
對(duì)于有結(jié)構(gòu)的數(shù)據(jù)我們使用字典時(shí)會(huì)顯得非常方便,因?yàn)樗粌H可以保存結(jié)構(gòu),還可以保證記錄不重復(fù),但是對(duì)于那些沒有結(jié)構(gòu)的數(shù)據(jù)我們又不希望他們重復(fù)時(shí),字典和列表顯然都不適合我們使用了,這時(shí)我們就會(huì)想到使用集合了
三.集合(set)
1集合的定義:
{元素1,元素2,元素3.....}和字典一樣都是用大括號(hào)定義,不過不同的是其中沒有冒號(hào)分割,還有一種定義方法是向set()函數(shù)中傳遞任意一個(gè)序列(如一個(gè)字符串set('fsdaf'))
2集合的運(yùn)算:
python中的集合同于數(shù)學(xué)中的集合同樣有交,并,差等運(yùn)算其中并算提供方法union(),差集方法difference()不過這里不同的是只能顯示使用該方法的集合中不同于另一個(gè)集合的所有元素,交集的方法intersection()顯示相同的元素
下面用代碼來實(shí)現(xiàn)上述方法:
#集合的運(yùn)算 temp={'a','e','i','o','u'} temp2=set("fda"); #交運(yùn)算 result=temp.intersection(temp2)#{'a'} #并運(yùn)算 result=temp.union(temp2)#{'a', 'o', 'f', 'd', 'u', 'e', 'i'} #差運(yùn)算 result=temp.difference(temp2)#{'o', 'e', 'u', 'i'}
我們知道變量有兩種一種是變量一種是常量,變量的值可以重新賦予,而常量的值則不行,在python中我們同樣有一個(gè)不變的結(jié)構(gòu)叫做元組
四.元組(tuple)
1元組的定義:
元組與列表密切相關(guān)列表是用中括號(hào)定義而元組則是用小括號(hào)定義(元素1,元素2,元素3,.....),值得注意的是當(dāng)只有一個(gè)對(duì)象是并不能僅僅(對(duì)象)這樣定義并不是元組,正確的定義方法是(對(duì)象,)這樣才是元組
在最后我有必要說明一下:在這四個(gè)內(nèi)置結(jié)構(gòu)為空時(shí)的解釋器的表示方法:1.空列表[] 2.空字典{} 3.空集合set() 4.空元組()
以上所述是小編給大家介紹的python的四種內(nèi)置數(shù)據(jù)結(jié)構(gòu)詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Python常見數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列用法示例
- Python數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列及二叉樹定義與用法淺析
- Python中的函數(shù)式編程:不可變的數(shù)據(jù)結(jié)構(gòu)
- python數(shù)據(jù)結(jié)構(gòu)之線性表的順序存儲(chǔ)結(jié)構(gòu)
- python數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之實(shí)現(xiàn)線性表的順序
- Python數(shù)據(jù)結(jié)構(gòu)之圖的應(yīng)用示例
- Python數(shù)據(jù)結(jié)構(gòu)之哈夫曼樹定義與使用方法示例
相關(guān)文章
python基于?Web?實(shí)現(xiàn)?m3u8?視頻播放的實(shí)例
這篇文章主要介紹了python基于?Web?實(shí)現(xiàn)?m3u8?視頻播放的實(shí)例的相關(guān)資料,需要的朋友可以參考下2023-06-06python實(shí)現(xiàn)爬蟲抓取小說功能示例【抓取金庸小說】
這篇文章主要介紹了python實(shí)現(xiàn)爬蟲抓取小說功能,結(jié)合具體實(shí)例形式分析了使用Python爬蟲抓取金庸小說的具體操作技巧,需要的朋友可以參考下2019-08-08python執(zhí)行shell獲取硬件參數(shù)寫入mysql的方法
這篇文章主要介紹了python執(zhí)行shell獲取硬件參數(shù)寫入mysql的方法,可實(shí)現(xiàn)對(duì)服務(wù)器硬件信息的讀取及寫入數(shù)據(jù)庫的功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12Windows上配置Emacs來開發(fā)Python及用Python擴(kuò)展Emacs
這篇文章主要介紹了Windows上配置Emacs來開發(fā)Python及用Python擴(kuò)展Emacs的方法,Emacs與Vim并稱為開發(fā)者手中最強(qiáng)大的兩款文本編輯器,需要的朋友可以參考下2015-11-11利用matplotlib+numpy繪制多種繪圖的方法實(shí)例
matplotlib是Python最著名的繪圖庫,本文給大家分享了利用matplotlib+numpy繪制多種繪圖的方法實(shí)例,其中包括填充圖、散點(diǎn)圖(scatter plots)、. 條形圖(bar plots)、等高線圖(contour plots)、 點(diǎn)陣圖和3D圖,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05Python3.6實(shí)現(xiàn)根據(jù)電影名稱(支持電視劇名稱),獲取下載鏈接的方法
這篇文章主要介紹了Python3.6實(shí)現(xiàn)根據(jù)電影名稱(支持電視劇名稱),獲取下載鏈接的方法,涉及Python爬蟲與正則相關(guān)操作技巧,需要的朋友可以參考下2019-08-08Python+OpenCV實(shí)現(xiàn)基本的圖像處理操作
說到圖像處理,那必然要提到opencv模塊了。本文將從最基本的opencv模塊在圖像的基本操作上說起,利用Python+OpenCV實(shí)現(xiàn)圖像的讀取保存等,感興趣的可以了解一下2022-07-07python django 原生sql 獲取數(shù)據(jù)的例子
今天小編就為大家分享一篇python django 原生sql 獲取數(shù)據(jù)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08爬蟲框架 Feapder 和 Scrapy 的對(duì)比分析
本篇文章在源碼層面比對(duì) feapder、scrapy 、scrapy-redis 的設(shè)計(jì),閱讀本文后,會(huì)加深您對(duì) scrapy 以及 feapder 的了解,以及為什么推薦使用 feapder,剛興趣的朋友可以參考下面文章內(nèi)容2021-09-09