一,數據結構的概念
數據結構是通過某種方式組織在一起的數據集合,這些數據元素可以是數字或者字符,甚至可以是其他的數據結構。
Python中最基本的數據結構是序列(sequence)。序列中的每個元素被分配一個序號——元素位置,稱為索引,第一個索引為0,第二個為1,以此類推,最后的索引位為-1.
二,序列操作
序列的操作包括:索引,分片,加,乘,檢查某個元素是否屬於序列成員。Python還可以計算序列長度,找出最大值max()方法,最小值min()方法。同時還可對序列進行迭代iter方法。迭代的意思就是可以對序列中的元素重復執行某些操作。
1,索引
我們可以根據索引的位置來取數據,使用負數時,可以從列表倒序取出數據。
列表的索引 data=["list","string","dict","tuple"] #使用索引取出對應數值,Python默認0位為第一位,所以使用索引1返回列表第二個數值
print(data[1]) 運行結果為string #使用負數取末尾值
print(data[-1]) 運行結果為tuple
2,分片
分片操作可以取出范圍內的數據,使用冒號隔開兩個索引來進行操作。分片操作有一個很形象的比喻:顧頭不顧尾,意思就是我們兩個索引位,只包含第一個索引位,第二個索引位不在分片區內
#列表的分片操作 data=["list","string","dict","tuple"] #分片操作取出前三個數據 print(data[0:3]) 運行結果:['list', 'string', 'dict'] #取出全部數據 print(data[:]) 運行結果:['list', 'string', 'dict', 'tuple'] #負數取值應注意,左邊索引位要比右邊索引位小,按從小到大的方式 print(data[-3:-1]) 運行結果:['string', 'dict'] #可以使用步長取值 print(data[0:3:2]) 運行結果:['list', 'dict'] #倒序取值時,要注意步長應使用負數,且不能為0 print(data[3:1:-1]) 運行結果:['tuple', 'dict']
"對於一個正數步長,Python會從頭開始向右取值,直到最后一個元素。對於一個負數步長,則是從序列的尾部開始向左取值,直到元素的第一個元素"
3,序列的加乘操作
使用加操作可以使兩個列表連接到一起,需要注意的是,在使用加操作的時候左右兩邊的數據必須是同一類型,不同類型的數據不能進行連接操作。
#列表的連接操作 data=["list","string","dict","tuple"] data1=[0,1,2,3] data3="hello world" #列表的加操作,連接兩個列表、 print(data+data1) 運行結果:['list', 'string', 'dict', 'tuple', 0, 1, 2, 3] #測試列表可以與不同類型的值相連接 print(data+data3) 運行結果:TypeError: can only concatenate list (not "str") to list
列表的乘操作
print(data*3)
運行結果:
['list', 'string', 'dict', 'tuple', 'list', 'string', 'dict', 'tuple', 'list', 'string', 'dict', 'tuple']
三,列表
1,list函數
使用list函數可以改變一些數據的數據類型:例如字符串,元組等
#使用list函數轉變數據類型 data="hello world" print(list(data)) 運行結果: ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
2,列表元素賦值
列表的元素賦值使用索引號進行修改,需要注意,我們不能為一個不存在的索引號賦值
列表的賦值操作 data=["list","string","dict","tuple"] print(data) data[-1]="value" print(data) 運行結果 原列表內容:['list', 'string', 'dict', 'tuple'] 修改后內容:['list', 'string', 'dict', 'value']
列表元素分片賦值操作,分片操作可以給一個空列表賦值,也可以為列表做分片替換
#分片賦值 data=["list","string","dict","tuple","int"] data[:2]=["list1","string1"] print(data) 運行結果: ['list1', 'string1', 'dict', 'tuple', 'int'] #使用分片賦值的原理,對列表進行刪除元素操作 data=["list","string","dict","tuple","int"] #data[:]表示列表所有元素 data[:]=[] print(data) 運行結果 : []空列表
2,刪除列表元素
刪除列表元素使用del關鍵字加索引號進行操作,索引號超出列表范圍將報錯
#刪除列表元素操作,使用del關鍵字 data=["list","string","dict","tuple"] print(data) del data[1] print(data) 運行結果 原列表內容:['list', 'string', 'dict', 'tuple'] 刪除后內容:['list', 'dict', 'tuple']
3,列表操作
1,append
此方法用於別表末尾添加值,它操作后的列表不是一個修改過的新列表(類似拷貝的原理,會有專門內容介紹),而是返回一個修改過的原列表。
#append方法 data=["list","string","dict","tuple","int"] print(data) data.append("float") print(data) 原列表內容:['list', 'string', 'dict', 'tuple', 'int'] 添加后的內容:['list', 'string', 'dict', 'tuple', 'int', 'float']
2,count
此方法統計某個元素在列表中出現的次數。
#count方法 data=["list","string","dict","tuple","int","int"] print(data.count("int")) 運行結果: 2
3.extend
此方法可以在列表末尾一次性添加另一個序列的多個值,可以擴展原列表,而不是復制出一個新列表
#extend data=["list","string","dict","tuple","int"] data2=["list1","string1"] print(data) data.extend(data2) print(data) 運行結果: 原data列表:['list', 'string', 'dict', 'tuple', 'int'] 擴展后data列表:['list', 'string', 'dict', 'tuple', 'int', 'list1', 'string1']
此方法對比列表連接操作的不同,連接操作不會在原有列表上進行擴展,只會創建一個新的列表。
data=["list","string","dict","tuple","int"] data2=["list1","string1"] print(data+data2) print(data) 運行結果: ['list', 'string', 'dict', 'tuple', 'int', 'list1', 'string1'] ['list', 'string', 'dict', 'tuple', 'int'] 從結果可以看出,data列表並沒有被覆蓋,而是創建了一個新列表
4,index
index方法用於從列表中查找出某個元素第一次匹配成功后的索引位置
#index方法 data=['list', 'string', 'dict', 'tuple', 'int'] print(data.index("int")) 運行結果: 4 返回一個索引位
5,insert
insert方法用於將對象插入到列表中,插入位置的值會自動向后移位,在添加新值后,原列表后進行擴展操作,原列表將被覆蓋。
#insert方法 data=['list', 'string', 'dict', 'tuple', 'int'] data.insert(0,"string") print(data) 運行結果: ['string', 'list', 'string', 'dict', 'tuple', 'int']
6,pop
pop方法,默認刪除列表最后一個值,並且返回刪除的值,也可以根據索引位刪除指定值,且返回被刪除數值的值。
此方法配合insert方法可以實現隊列操作,使用insert(0)添加值,使用pop(0)刪除值,實現一個先進先出的隊列,也可以使用append方法,使用pop方法,實現一個先進后出的隊列
放入和移出操作就是入棧和出棧,python可以使用append方法進行入棧操作,pop方法模擬出棧操作
#pop方法 data=['list', 'string', 'dict', 'tuple', 'int'] print(data.pop())#默認刪除最后一個值 print(data.pop(1))#指定刪除索引位1的值 運行結果: int string 在指定索引位時,不能超出列表長度,否則報錯
pop方法是唯一一個既能刪除一個值又能返回該元素值的列表方法
一個先進先出隊列的實現示例:
#先進先出的隊列實現 data=[] for i in range(4): data.insert(0,i) print(data) print(data.pop(0)) print(data) 運行結果: 添加值后的列表 [0] 取出的值 0 取出值后的列表 [] 添加值后的列表 [1] 取出的值 1 取出值后的列表 []
一個先進后出的隊列實現:
#先進后出的隊列實現 data=[5,] for i in range(2): data.insert(0,i) print("添加值后的列表",data) print("取出的值",data.pop()) print("取出值后的列表",data) 運行結果: 添加值后的列表 [0, 5] 取出的值 5 取出值后的列表 [0] 添加值后的列表 [1, 0] 取出的值 0 取出值后的列表 [1]
7,remove
remove方法用於移除列表中某元素第一個匹配項:它移除后不會返回一個刪除元素的值
#remove方法 data=['list', 'string', 'dict', 'tuple', 'int'] data.remove("int") print(data) 運行結果: ['list', 'string', 'dict', 'tuple']
8,reverse
reverse方法將列表中的元素反向存放,要想取值,使用reversed,此方法返回一個迭代器
#reverse data=[1,2,3,4,5] print(data.reverse()) redata=data.reverse()#測試后,reverse沒有返回值 print(redata) #要想取得返回值,使用reserved,返回一個迭代器 a=reversed(data) print(a)#<list_reverseiterator object at 0x0000026DAA7FCB70> for i in a: print(i)
9,sort
sort方法用於在原位置對列表進行排序,會改變原列表,是列表元素按一定順序排列。這個方法總是產生一個列表,所以他可以對任何序列進行操作排序
#sort data=[2,5,7,8,5,3,1,4] data.sort() print(data) 運行結果: [1, 2, 3, 4, 5, 5, 7, 8]
sort方法沒有返回值,它會改變原列表的值的順序。
列表的使用就到這里,到后邊會介紹列表生成式,和列表推導式的使用