python之列表操作的幾個函數


Python中的列表是可變的,這是它卻別於元組和字符串最重要的特點,元組和字符串的元素不可修改。列舉一些常用的列表操作的函數和方法。

1,list.append(x),將x追加到列表list末尾:

1 stack = [3,4,5] #定義列表
2 print(id(stack)) #打印列表的id值
3 stack.append(6) #將6追加到列表末尾
4 print(stack) #打印列表
5 print(id(stack)) #打獵列表的id值
6 stack.append(7) #將7追加到列表
7 print(stack) #打印列表
8 print(id(stack)) #打印列表的id值
9 '''總結:通過打印id發現,append是在原對象的基礎上新增元素,並沒有改變原對象在內存中的存儲。'''

2,list.extend(L),通過添加指定迭代器的所有元素來擴充列表,相當於a[len(a):] = L,其中L必須是可迭代的,如列表,字符串,字典,集合等。

 1 #list.extend(L),通過添加指定列表的所有元素來擴充列表,相當於,list[len(list):] = L
 2 #參數L必須是可迭代的,可以是列表,元組,字符串,字典。集合。
 3 
 4 a = [1] #定義原始列表
 5 sTring = 'string' #定義字符串
 6 listNumber = list(range(2,20,3)) #定義數字列表,步長為3
 7 listString = ['a','b','d','e'] #定義字符串列表
 8 dictTa = {'value':120131,'label':'Description','name':'Python',} #定義字典
 9 setTa = set({'value':120131,'label':'Description','name':'Python',}) #定義集合
10 
11 print(a) #打印原始的列表a
12 print(id(a)) #打印原始列表的id值
13 
14 a.extend(sTring) #將字符串sTring作為參數傳遞給extend,以擴充原始列表a
15 print(type(sTring)) #打印下字符串列表的數據類型
16 print(a) #打印通過extend擴充字符串后的列表a
17 print(id(a)) #打印擴充后的列表的id值,與原始id值一樣
18 
19 a.extend(listNumber) #將數字列表listNumber作為參數傳遞給extend,以擴充列表a
20 print(type(listNumber)) #打印一下數字列表的數據類型
21 print(a) #打印通過extend擴充數字列表后的列表a
22 print(id(a)) #打印擴充數字列表后的id值
23 
24 a.extend(listString) #將字符串列表作為參數傳遞給extend,以擴充列表a
25 print(type(listString)) #打印字符串列表的數據類型
26 print(a) #打印通過extend擴充字符串列表后的列表a
27 print(id(a)) #打印擴充字符串列表后的id值
28 
29 a.extend(dictTa) #將字典dictTa作為參數傳遞給extend,以擴充列表
30 print(type(dictTa)) #打印字典的數據類型
31 print(a) #打印通過extend擴充字典列表后的列表a
32 print(id(a)) #打印擴充字典后的id值
33 
34 a.extend(setTa) #將集合setTa作為參數傳遞給extend,以擴充列表a
35 print(type(setTa)) #打印集合setTa的數據類型
36 print(a) #打印通過extend擴充集合后的列表a
37 print(id(a)) #打印擴充集合后的id值
38 '''總結,1,id值並沒有變,也就是內存中數據存儲並沒有變;
39         2,字典和集合通過extend只擴充鍵,值沒有一起被擴充;
40         3,字典和集合通過extend擴充,
41             字典的鍵是“有序”排列,即在字典中的位置是啥位置,擴充后在列表中也是對應;
42             而集合的鍵是“隨機”排列;

3,list.insert(i,x) 在列表的指定位置插入元素。其中第一個參數i指定列表索引位置,第二個為要插入的值x。如list.insert(0,x),就是在列表的最前面插入元素x,list.insert(2,x),就表示在列表索引為2的位置插入元素x;list.insert(len(list),x),表示在列表末尾插入元素x,相當於list.append(x)。

 1 a = [1,2,3,4,5]
 2 b = ['4','6','8','10']
 3 c = ['a','b','c','d','e']
 4 d = list(range(1,100,20))
 5 
 6 a.insert(3,6) #在列表a索引為3的位置插入數字6
 7 a.insert(len(a),7) #在列表b末尾插入數字7,相當於a.append(7)
 8 b.insert(5,'12') #在列表b索引為5的位置插入字符串12
 9 b.insert(len(b),'14') #在列表b末尾插入字符串14,相當於b.append('14')
10 c.insert(3,'f') #在列表c索引為3的位置插入字符串'f'
11 c.insert(len(c),'g') #在列表c的末尾插入字符串g,相當於c.append('g')
12 d.insert(2,10) #在列表d索引為2的位置插入數字10
13 d.insert(len(d),100) #在列表d的末尾插入數字100,相當於d.append(100)

還有一個問題,如果insert指定的索引位置的值大於列表索引位置的最大值,即list.insert(i,x),當i>len(list)的時候,x將會被追加到列表末尾,相當於list.append(x)。

4,list.remove(x) 刪除列表中第一個值為x的元素。如果沒有,將引發一個ValueError的錯誤。為了方便演示,創建一個首尾相同元素的列表。

1 #list.remove(x) 刪除列表list中值為x的第一個元素,如果值不存在就會返回一個錯誤
2 a = ['a','b','c','d','e','a'] #定義首尾元素相同的列表,方便演示
3 b = a.remove('a') #刪除列表a里第一個值為字符串a的元素並賦值給變量b
4 print(a) #打印列表,列表中第一次出現的a被刪除
5 print(b) #打印b,返回None
6 c = a.remove('a') #再刪a,就把最后一個a也從列表刪除了
7 print(a) #打印是否符合預期
8 print(c) #打印c,返回None

5,list.pop([i]) 從列表的指定位置刪除元素(本人理解為從列表指定位置彈出元素),與remove不同,pop方法刪除的元素是可以返回的。如果沒有指定可選參數[i]的值,pop()從列表末尾開始刪除。pop([i])方法中 i 兩邊的方括號表示這個參數是可選的,而不是要求輸入一對方括號,經常在 Python 庫參考手冊中遇到這樣的標記。為方便與remove對比,還是用上面的例子:

 1 a = ['a','b','c','d','e','a'] #定義首尾元素相同的列表,方便演示
 2 b = a.remove('a') #刪除列表a里第一個值為字符串a的元素並賦值給變量b
 3 print(a) #打印列表,列表中第一次出現的a被刪除
 4 print(b) #打印b,返回None
 5 c = a.remove('a') #再刪a,就把最后一個a也從列表刪除了
 6 print(a) #打印是否符合預期
 7 print(c) #打印c,返回None
 8 
 9 d = a.pop(1) #使用pop方法彈出列表a中索引為1的值
10 print(a) #打印列表a
11 print(d) #打印彈出的值,值為字符串c

6,list.clear() 移除列表中所有的項,但是保存列表list的數據類型,使用clear方法后,list返回一個空列表。等同於del list[:]

 1 a = [1,2,3,4,5] #定義數字列表b
 2 print(id(a)) #打印列表a的id值
 3 a.clear() #使用方法clear()清空列表中所有項
 4 print(a) #打印a,返回空列表
 5 print(type(a)) #打印數據類型,返回<class 'list'>
 6 print(id(a)) #再次打印列表a的id值,與沒刪除之前一樣
 7 
 8 b = [2,3,4,5,6] #定義列表b
 9 print(id(b)) #打印列表b的id值
10 del b[:] #刪除列表b在內存中的副本,b[:]表示列表b的一個切片,也可以理解為副本.
11 print(b) #打印列表b,返回[]
12 print(type(b)) #查看列表b的數據類型,返回<class 'list'>
13 print(id(b)) # 查看被清空后的列表b的id值與未清空之前是否相同
14 
15 c = [6,7,8,9,10] #定義列表c
16 print(c) #打印c,輸出:[6, 7, 8, 9, 10]
17 del c #刪除c
18 print(c) #打印c,NameError: name 'c' is not defined

問題:列表b和列表c都是使用的del語句,列表b使用切片,內存中還有位置;列表c是把整個對象都刪除了,在內存中根本沒有了位置。要惡補內存,數據,存儲,對象的知識。

7,list.index(x) 返回列表list中第一個值為x的索引,如果沒有將返回一個ValueError: xxx is not in list錯誤。其中xxx是引發錯誤的值。

 1 a = [1,2,3,4,5] #定義數字列表
 2 b = ['a','b','c','d','e','a'] #定義字符串列表
 3 
 4 r1 = a.index(1) #獲取值為1的索引
 5 print(r1)    #打印返回0
 6 r1 = a.index(2) #獲取列表a中值為2的索引
 7 print(r1)    #打印返回1
 8 r1 = a.index(3) #獲取列表a中值為3的索引
 9 print(r1)    #打印返回2
10 r1 = a.index(4) #獲取列表a中值為4的索引
11 print(r1)    #打印返回3
12 r1 = a.index(5) #獲取列表a中值為5的索引
13 print(r1)    #打印返回4
14 r1 = a.index(6) #嘗試獲取列表a中值為6的索引,因為值6根本不存在與列表中,返回錯誤ValueError: 6 is not in list
15 
16 
17 #循環讀取索引
18 for index, value in enumerate(a):
19     print(index)
20 
21 for index in range(len(a)):
22     print(index)
23 
24 r2 = b.index('a') #獲取列表b中第一個值為a的索引
25 print(r2)     #打印返回0
26 r2 = b.index('b') #獲取列表b中第一個值為b的索引
27 print(r2)    #打印返回1
28 r2 = b.index('c') #獲取列表b中第一個值為c的索引
29 print(r2)     #打印返回2
30 r2 = b.index('d') #獲取列表b中第一個值為d的索引
31 print(r2)    #打印返回3
32 r2 = b.index('e') #獲取列表b中第一個值為e的索引
33 print(r2)    #打印返回4
34 r2 = b.index('a') #還是獲取列表b中第一個返回值為a的索引
35 print(r2)     #打印還是返回0
36 
37 #循環讀取索引
38 for index, value in enumerate(b):
39     print(index)
40 
41 for index in range(len(b)):
42     print(index)
43     
44     

8,list.count(x) 統計x在列表list中出現的次數。

 

1 a = [1,2,3,4,5,5,1] #定義數字列表
2 b = ['a','b','c','d','e','a'] #定義字符串列表
3 
4 print(a.count(1)) #計算數字1在列表a中出現的次數並打印
5 print(a.count(6)) #計算數字6在列表a中出現的次數並打印
6 print(b.count('a')) #計算字符串a在列表b中出現的次數並打印
7 print(b.count('c')) #計算字符串c在列表b中出現的次數並打印

9,list.sort() 對列表中的元素進行排序(永久),與之對應的有臨時排序sorted(list)。用法如下:

 1 orginalAlist = [1,2,3,4,5,5,1] #定義數字列表
 2 orginalBlist = ['a','b','c','d','e','a'] #定義字符串列表
 3 
 4 sortedAlist = sorted(orginalAlist) #對列表A進行臨時排序並賦值給變量sortedAlist
 5 print(sortedAlist) #打印臨時排序后的列表 [1, 1, 2, 3, 4, 5, 5]
 6 print(orginalAlist) #打印原始列表 [1, 2, 3, 4, 5, 5, 1]
 7 
 8 sortedBlist = sorted(orginalBlist) #對列表B進行臨時排序並賦值給變量sortedBlist
 9 print(sortedBlist) #打印臨時排序后的列表 ['a', 'a', 'b', 'c', 'd', 'e']
10 print(orginalBlist) #打印原始列表 ['a', 'b', 'c', 'd', 'e', 'a']
11 
12 
13 orginalAlist.sort() #將列表orginalAlist用sort進行永久排序
14 print(orginalAlist) #打印列表 [1, 1, 2, 3, 4, 5, 5]
15 
16 orginalBlist.sort() #將列表orginalBlist用sort進行永久排序
17 print(orginalBlist) #打印列表 ['a', 'a', 'b', 'c', 'd', 'e']

10,倒序排列列表中的元素,一般與sort配合使用。

 1 orginalAlist = [1,2,3,4,5,5,1] #定義數字列表
 2 orginalBlist = ['a','b','c','d','e','a'] #定義字符串列表
 3 
 4 orginalAlist.reverse() #調用reverse倒序排列列表
 5 print(orginalAlist) #打印 [1, 5, 5, 4, 3, 2, 1]
 6 
 7 orginalBlist.reverse() #調用reverse倒序排列列表
 8 print(orginalBlist) #打印 ['a', 'e', 'd', 'c', 'b', 'a']
 9 
10 orginalAlist.sort(reverse=True) #將列表orginalAlist先用sort進行排序,然后將reverse=True作為參數傳遞給sort,將排序好的列表進行倒序排列
11 print(orginalAlist) #打印排序好的倒序列表 [5, 5, 4, 3, 2, 1, 1]
12 
13 orginalBlist.sort(reverse=True) #將列表orginalBlist先用sort進行排序,然后將reverse=True作為參數傳遞給sort,將排序好的列表進行倒序排列
14 print(orginalBlist) #打印排序好的倒序列表 ['e', 'd', 'c', 'b', 'a', 'a']

11,list.copy() 對列表進行淺復制,相當於list[:]

 1 a = [1,2,3,4,5,5,1] #數字列表a
 2 b = ['a','b','c','d','e','a'] #字符串列表b
 3 
 4 a1 = a.copy() #將a復制一份並賦值給a1
 5 a2 = a[:] #將a再復制一份並賦值給a2
 6 print(a,a1,a2) #打印三個列表,一樣
 7 print(id(a),id(a1),id(a2)) #打印id,表示並不是同一個對象
 8 
 9 b1 = b.copy() #將b復制一份並賦值給b1
10 b2 = b[:] #將b再復制一份並賦值給b2
11 print(b,b1,b2) #打印三個列表,內容一致
12 print(id(b),id(b1),id(b2)) #打印三個列表id,證明三個列表並不是同一個對象

代碼並無實際應用意義,僅供交流學習使用,歡迎補充。

 


免責聲明!

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



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