Python3中的列表用法,看這一篇就夠了


 

類似C語言中的列表用法

--------------------------------------------------------------------------------------------------------------

創建:列表使用中括號表示,內部元素使用逗號隔開,元素的數據類型允許不一致,允許多層嵌套

names = ['Tom',"Lily",'Eric']

infos = ['Hello',5,[5.6,'BYE']]

 

訪問:利用列表的[下標 ]訪問單個元素,第一個元素的下標是0,依次加1;也可從最后一個元素訪問,下標是-1,依次減1

若下標出界,則報錯IndexError: list index out of range

 

>>> names[0]

'Tom'
 
>>> names[ 2 ]
'Eric'
 
>>> names[ - 1 ] #訪問最后一個元素(倒數第一個元素)
'Eric'
 
>>> names[ - 2 #訪問倒數第二個元素
'Lily'
 
>>> infos[ 2 ][1]  #訪問多層列表
'BYE'
 

 追加:在原有的列表末尾追加一個或者多個

 >>> names

['Tom', 'Lily', 'Eric']
>>> names.append("Rain") #在末尾添加一個元素使用append()
>>> names ['Tom', 'Lily', 'Eric', 'Rain']

>>> names.expend(['Peter', 'Amy']) #在末尾添加多個元素使用expend()
>>> names
['Tom', 'Lily', 'Eric', 'Rain','Peter', 'Amy']
 
切片:與訪問單個元素不同的是,切片可一下子訪問多個元素
>>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
>>> names[1:4]  #取下標1至下標4之間的值,包括1,不包括4
['Lily', 'Eric', 'Rain']
>>> names[1:-1] #取下標1至-1的值,不包括-1 ['Lily', 'Eric', 'Rain', 'Peter']
>>> names[0:3] #取開頭到下標3之間的值,不包括3
['Tom', 'Lily', 'Eric']
>>> names[:3] #如果是從頭開始取,0可以忽略,跟上句效果一樣
['Tom', 'Lily', 'Eric']
>>> names[3:] #如果想取最后一個,不能寫-1,只能這么寫 ['Rain', 'Peter', 'Amy']

切片默認的步長為1,意思是下標值遞增1取值;也可自行設置步長[start:end:步長]
>>> names[1:5:2] #取下標值為1,3 的值 ['Lily', 'Rain']
>>> names[::2] #表示從開頭的下標值開始加2取
['Tom', 'Eric', 'Peter']

 

 插入,使用list.insert(位置,元素)將需要添加的元素插入到目標列表的下標位置處

 

>>> names
['Tom', 'Lily', 'Eric', 'Rain', 'Peter', 'Amy']

 

>>> names.insert(2,'p2')
['Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'Amy']

>>> names.insert(0,'start')
['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'Amy']

>>> names.insert(-1,'end')#本意是插入到最后一個,但是結果不對
['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'end', 'Amy']

 

修改:直接將元素重新賦值即可

>>> names
 ['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'end', 'Amy']

>>>names[-2] = '該換人了'
['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', '該換人了', 'Amy']

刪除:有三種刪除方法,del、remov()和pop(),示例如下

 

>>>names
['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', '該換人了', 'Amy']

1. del list[index] 用下標值index刪除
>>> del names[0]
['Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', '該換人了', 'Amy']

>>> del names[6]
['Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'Amy']

del names[]表示刪除names列表

2.list.remove(value)用元素值刪除

>>> names.remove('p2')
['Tom', 'Lily', 'Eric', 'Rain', 'Peter', 'Amy']

3.list.pop(index) 用下標值index刪除,若省略則刪除最后一個元素
>>> names.pop()#不寫下標值刪除最后一個
['Tom', 'Lily', 'Eric', 'Rain', 'Peter']

>>>names.pop(1)
['Tom', 'Eric', 'Rain', 'Peter']

 

 統計:使用list.count(value)統計列表中元素值value出現的次數

>>> names2 = ['Tom', 'Eric', '3Rain', '_Peter','Tom2','Tom',1,2,3]
>>> names2.count('Tom')
2

翻轉:list.reverse()基於當前列表將元素排列順序翻轉(不生成新列表)

>>> names2 = ['Tom', 'Eric', '3Rain', '_Peter','Tom2','Tom',1,2,3]
>>> names2.reverse()
[3, 2, 1, 'Tom', 'Tom2', '_Peter', '3Rain', 'Eric', 'Tom']

 

排序:list.sort()將列表元素值首字母的ASCII碼或者數值升序(默認)或者降序排列

若有元素數據類型不一致會出現報錯例如:TypeError: '<' not supported between instances of 'str' and 'int'

>>> names3 = ['Tom', 'Eric', '3Rain', '_Peter','Tom2','Tom','1','2','3']
>>> names3.sort()
>>> names3
['1', '2', '3', '3Rain', 'Eric', 'Tom', 'Tom', 'Tom2', '_Peter']

>>> nums = [1,2.6,3,56,89,-1]
>>> nums.sort()
>>> nums
[-1, 1, 2.6, 3, 56, 89]

也可使用list.sort(reverse = True)進行降序排列

獲取下標:list.index[value]返回列表中第一個元素值為value的下標
>>> names2
[3, 2, 1, 'Tom', 'Tom2', '_Peter', '3Rain', 'Eric', 'Tom']
>>> names2.index('Tom')
3

復制列表

 1. 使用“=”直接復制出另一個列表,不過這兩個列表指向同一個對象,改變任何一個列表的元素值均會影響另一個,包括一維、多維里的元素

>>>infos1 = infos
>>>print(infos,infos1)
['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
>>>infos[1] = 'world'
>>>infos[2][1] = 'BUPT'
>>>print(infos,infos1)
['Hello', 'world', [5.6, 'BUPT']] ['Hello', 'world', [5.6, 'BUPT']]

 此方法並不是嚴格意義上的復制,只是新建了一個對象指向了原來的空間

2. 工廠函數,會改變多維元素,一維元素不改變

>>>infos2 = infos
>>>print(infos,infos2)
['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
>>>infos[1] = 'world'
>>>infos[2][1] = 'BUPT'
>>>print(infos,infos2)
['Hello', 'world', [5.6, 'BUPT']] ['Hello', 5, [5.6, 'BUPT']]

中間的列表是單獨分配了一塊空間,然后從第一層列表中去引用地址,復制的info2也是引用的地址,所以真實的值一變,兩個列表的內部列表的值也就變了

3. 使用list.copy()進行淺復制

>>>infos3 = infos.copy()
>>>print(infos,infos3)
['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
>>>infos[1] = 'world'
>>>infos[2][1] = 'BUPT'
>>>print(infos,infos3)
['Hello', 'world', [5.6, 'BUPT']] ['Hello', 5, [5.6, 'BUPT']]

可見,此方法與方法2工廠函數復制的結果一樣


4.調用copy模塊進行淺復制
>>>infos4 = copy.copy(infos)
>>>print(infos,infos3)
['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
>>>infos[1] = 'world'
>>>infos[2][1] = 'BUPT'
>>>print(infos,infos4)
['Hello', 'world', [5.6, 'BUPT']] ['Hello', 5, [5.6, 'BUPT']]

可見,此方法與方法2工廠函數復制的結果一樣

5.調用copy模塊進行深復制
>>>infos5 = copy.deepcopy(infos)
>>>print(infos,infos5)
['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
>>>infos[1] = 'world'
>>>infos[2][1] = 'BUPT'
>>>print(infos,infos5)
['Hello', 'world', [5.6, 'BUPT']] ['Hello', 5, [5.6, 'BYE']]

由此可見,只有這種方法做到了完全復制出了另一個獨立的列表

小結:
用=生成的列表只是指向了同一個空間,相當於同一個空間有兩個列表名字而已
淺復制實現有三種:工廠函數[:]、copy方法和調用copy模塊淺復制,運行結果是第一維元素復制出來是獨立的,第二維等多維元素列表公用了同一個空間
完全獨立復制就只能使用copy模塊里的深復制了

列表拼接
與字符串類似,可以使用加號+進行拼接(注意不是元素值相加),使用乘號*復制自身若干次
>>>list1 = [1,2,3]
>>>list2 = [1,3,5]
>>>list3 = list1 + list2
[1, 2, 3, 1, 3, 5]
>>>list4 = list1*3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
當然,expan()方法也能實現,並且顯得更為專業

列表比大小
默認從第一個元素開始比較其對應的ASCII碼的大小,只要有一個pk贏了就代表整個列表贏了
>>>list1 < list2
False

判斷元素是否存在
in 和 not in,注意只能在當前維度進行判斷
>>>infos
['Hello', 'world', [5.6, 'BUPT']]
>>>'Hello' in infos
True
>>>5.6 in infos
False
>>>5.6 in infos[2]
True
 


免責聲明!

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



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