Python基础概念_7_数据结构
數據結構
8 數據結構
8.1簡介
數據結構是什么?它是計算機存儲、組織數據的方式。Python 中有常用的數據結構: 列表、元組、字典和集合。
8.2?列表
列表(list)是一種按順序存儲的數據結構。
8.2.1?列表簡介
還是那句話,計算機是對現實的抽象,讓我們從身邊找些數據結構的例子吧。
上面的這幅圖是我們常見的排隊的例子,先來的乘客排在前面,后面的緊跟其后。那么我們將這種結構抽象起來,它就是隊列:一種按照順序組織的結構。讓我們回顧下排隊時可能會有哪些場景:
??場景一:乘務員站按照離車門最近的順序檢票,此時每檢完一個,隊列里就少一個人。
??場景二:乘務員說后來的同志請站在隊列的后面,此時隊列里又多了人。
??場景三:乘務員說大家按照個子大小排個隊,排好了我再檢票。
??場景四:乘務員看排在第五位的人可疑,就沒按照順序檢票,而是直接問那個人“這位同志你的票呢?”
??場景五:乘務員說“這位抱小孩的先檢票吧,各位理解下”
??……
通過乘務員檢票的方式,我們不能抽象出隊列有如下幾類常用的方法:
增加元素、刪除元素、元素排序、索引訪問、插入等等。
8.2.2?列表常用方法
這里我們通過一個簡單的例子來揭開列表的神秘面紗。假設我們定義一個我的朋友軍訓的列表叫Myfriends,具體操作見下:
#增加、插入、刪除元素
MyFriends=['hanmeimei','tom','lilei','polly','jim']
print("我當前朋友的排列順序是:\t"+str(MyFriends))
MyFriends.append('lily')
print("我當前朋友的排列順序是:\t"+str(MyFriends)+"新增的lily在最后")
MyFriends.insert(2,'lucy')
print("lucy插到第三個位置后,我當前朋友的排列順序是:\t"+str(MyFriends))
?
?
#訪問List里的元素
print("我當前朋友排在第一個的是:\t"+str(MyFriends[0]))
print("我當前朋友排在最后一個的是:\t"+str(MyFriends[-1]))
#注意這里是左閉右開,即右邊取不到
print("截取后,我當前朋友的排列順序是:\t"+str(MyFriends[2:-1]))
print("我當前朋友的排列的長度是:\t"+str(len(MyFriends)))
?
?
forfriend in MyFriends:
??? print(str(friend)+"排在第"+str(MyFriends.index(friend)+1)+"位"+",它對應的索引號是"+str(MyFriends.index(friend)))
?
#刪除指定的元素lucy
MyFriends.remove('lucy')
print("刪除lucy后,我當前朋友的排列順序是:\t"+str(MyFriends))
MyFriends.pop()
print("pop最后一個元素后,我當前朋友的排列順序是:\t"+str(MyFriends))
delMyFriends[3]
print("刪除第4個元素后,我當前朋友的排列順序是:\t"+str(MyFriends))
?
?
#排序、反轉
MyFriends.reverse()
print("反轉后,我當前朋友的排列順序是:\t"+str(MyFriends))
?
MyFriends.sort()
print("排序后,我當前朋友的排列順序是:\t"+str(MyFriends))
來張表格更直觀些:
| 函數名 | 功能介紹 | 示例 |
| append | 在列表后追加元素 | lista.append('lily') |
| insert | 在指定位置增加元素 | lista.insert(2,'lucy') |
| extend | 通過另外個list擴充當前list | lista.extend(listb) |
| remove | 刪除list里指定的元素 | lista.remove('lucy') |
| del | 刪除list里的元素或則整個list | del lista[2] del lista |
| pop | 刪除list里最后一個元素 | lista.pop() |
| reverse | list里的順序逆轉 | lista.reverse() |
| sort | list里的元素排序 | lista.sort() |
| max | list里的最大值 | max(lista) |
| min | list里的最大值 | min(lista) |
| len | list的長度 | len(lista) |
| count | list里某個元素出現的次數統計 | lista.count('lucy') |
| index | list里某個元素出現的索引號 | lista.index('lucy') |
| cmp | 比較兩個列表的元素 | cmp(lista,listb) |
| list | 將一個元組轉為list | list(tupleA) |
| …… | …… | …… |
8.3?元組
理解了列表,那么元組(tuple)就很好理解,它跟列表很類似,但不能修改元素的值。打個比方,元組是中國的一段朝代順序表dynasty: 唐、宋、元、明、清,那么顯然這個列表是不能更新的,順序一致都是這樣,除非時光可以倒流。
一般我們這樣元組定義:
tuplea =('abcd', 786 , 2.23, 'john', 70.2 ),這里元素通過小括號(“()”)包裹起來,而列表則是通過中括號包(“[]”)裹起開。
鑒于元組類似于列表,這里不做詳細展開。如下附錄了元組里常用的方法:
| 函數名 | 功能介紹 | 示例 |
| cmp | 比較兩個元組里的元素 | cmp(tuplea,tupleb) |
| del | 刪除整個tuple | del tuplea |
| max | tuple里的最大值 | max(tuplea) |
| min | tuple里的最小值 | min(tuplea) |
| len | tuple的長度 | len(tuplea) |
| tuple | list轉tuple | tuple(lista) |
| …… | …… | …… |
8.4?字典
字典(dictionary)是一種靈活的通過key=>value(鍵值)來存儲數據的結構。
8.4.1?字典簡介
這里有一個最容易理解的例子就是我們的身份證號,它就相當于一個key,通過他可以找到你的姓名,年齡,地址等信息。這里為了簡單,我們僅僅假設key是身份證號,value是姓名,這個簡單的字典就叫id.當然如果你對之前的list章節理解了,其實你可以假設這里的key是身份證,而value是一個list,它里面有元素:姓名、年齡、地址等。好了,圍繞這個字典id,我們能想到它的哪些特點呢?
首先身份證號是唯一的
其次這里的身份證號是不可以變的,即便戶口遷了,身份證還是沒變
再有身份證號對應的姓名是可以重復的
一般我們通過key:value,然后以大括號包裹起來定義一個字典:
dicta = {'Alice':'2341', 'Beth': '9102', 'Cecil': '3258','John': '3258'}
dictb = {'Alice':'2341', 'Beth': '9102', 'Cecil': '3258'}
8.4.2?字典常用方法
這里通過表格列舉下字典里常用的方法:
| 函數名 | 功能介紹 | 示例 |
| str | 以字符串形式顯示字典 | str(dicta) |
| cmp | 比較兩個字典里的元素 | cmp(dicta,dictb) |
| copy | 返回一個字典的拷貝 | dicta.copy() |
| clear | 清空dict里的所有元素 | dicta.clear() |
| get | 通過key找對應的value,如果沒有可指定默認值 | dicta.get('lily',default= '莉莉') |
| has_key | 判斷字典里是否有某個key | dicta.has_key('lily') |
| values | 以列表形式返回字典里的元素 | for i in dicta.values: ??? print(i) |
| keys | 以列表形式返回字典里的鍵 | for i in dicta.keys: ??? print(i) |
| update | 把另外個字典里的鍵/值對更新到當前字典里 | dicta.update(dictb) |
8.5?集合
集合是無序的數據的組合。它跟list 很像,但是set的元素沒有重復,而且是無序的。
8.5.1?集合簡介
這里集合不是個新概念,它對應數學里的集合,可以進行交、差、并等操作。
一般我們通過set關鍵字結合小括號、中括號來定一個一個集合:
seta =set(['A', 'B', 'C'])
集合一般分為兩類:可變集合(set)和不可變集合(frozenset)
可變集合可對集合內元素進行改變,而不可變集合則不行。
8.5.2?集合常用方法
| 函數名 | 功能介紹 | 示例 |
| add | 像集合里添加元素 | s = set('beginman') s.add(0) |
| update | 更新集合 | s.update('MM') |
| remove | 刪除集合的里的指定元素 | s.remove('D') |
| |/union | 兩個集合的并集 | s1=set('begin') s2=set('man') s3=s1|s2 s4= s1.union(s2) |
| &/intersection | 兩個集合的交集 | s1=set('begin') s2=set('man') s3=s1&s2 s4=s1.intersection(s2) |
| -/difference | 兩個集合的補集 | s1=set('begin') s2=set('man') s3=s1-s2 s4=s1.difference(s2) |
| list | 集合轉list | s1=set('begin') |
| tuple | 集合轉tuple | s1=set('begin') |
| str | 集合的字符串表示 | s1=set('begin') |
| copy | 返回一個集合的拷貝 | s1=set('begin') s1.copy() |
| issubset | 判斷一個集合是另外個的子集 | s1=set('begin') s2=set('man') s1.issubset(s2) |
| clear | 清空集合里的元素 | s1=set('begin') s1.clear() |
| pop | 刪除集合中任何一個元素,并返回它 | s1=set('begin') s1.pop() |
| discard | 如果是集合中的元素就刪除它 | s1=set('begin') s1.discard() |
8.6?總結
通過本章的學習我們知道了Python 內建的數據結構以及他們的常用方法,這些數據結構將是編寫程序時至關重要的組成部分。
總結
以上是生活随笔為你收集整理的Python基础概念_7_数据结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 万能险部分领取是什么意思
- 下一篇: Python基础概念_8_字符串处理