Python數據結構之列表


一,數據結構的概念

數據結構是通過某種方式組織在一起的數據集合,這些數據元素可以是數字或者字符,甚至可以是其他的數據結構。

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方法沒有返回值,它會改變原列表的值的順序。

 

 

 列表的使用就到這里,到后邊會介紹列表生成式,和列表推導式的使用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM