python中列表切片操作


什么是列表:

列表(list)是Python以及其他語言中最常用到的數據結構之一。Python使用使用中括號 [ ] 來解析列表。列表是可變的(mutable)——可以改變列表的內容。

 

對應操作:

1 查([])

 1 names_class2=['張三','李四','王五','趙六'] 
 2   
 3 # print(names_class2[2]) 
 4 # print(names_class2[0:3]) 
 5 # print(names_class2[0:7]) 
 6 # print(names_class2[-1]) 
 7 # print(names_class2[2:3]) 
 8 # print(names_class2[0:3:1]) 
 9 # print(names_class2[3:0:-1]) 
10 # print(names_class2[:])  

2 增(append,insert)

  insert 方法用於將對象插入到列表中,而append方法則用於在列表末尾追加新的對象

1 names_class2.append('alex') 
2 names_class2.insert(2,'alvin') 
3 print(names_class2) 

3 改(重新賦值)

1 names_class2=['張三','李四','王五','趙六'] 
2   
3 names_class2[3]='趙七'
4 names_class2[0:2]=['wusir','alvin'] 
5 print(names_class2) 

4 刪(remove,del,pop)

1 names_class2.remove('alex') 
2 del names_class2[0] 
3 del names_class2 
4 names_class2.pop()#注意,pop是有一個返回值的  

5 其他操作

5.1  count

 

       count 方法統計某個元素在列表中出現的次數:

>>> ['to', 'be', 'or', 'not', 'to', 'be'].count('to')   
2  
>>> x = [[1,2], 1, 1, [2, 1, [1, 2]]]   
>>> x.count(1)   
2  
>>> x.count([1,2])   
1 

5.2 extend

 

         extend 方法可以在列表的末尾一次性追加另一個序列中的多個值。

1 >>> a = [1, 2, 3]   
2 >>> b = [4, 5, 6]   
3 >>> a.extend(b)   
4 >>> a   
5 [1, 2, 3, 4, 5, 6] 

  extend 方法修改了被擴展的列表,而原始的連接操作(+)則不然,它會返回一個全新的列表。

 1 >>> a = [1, 2, 3]   
 2 >>> b = [4, 5, 6]   
 3 >>> a.extend(b)   
 4 >>> a   
 5 [1, 2, 3, 4, 5, 6]   
 6 >>>   
 7 >>> a + b   
 8 [1, 2, 3, 4, 5, 6, 4, 5, 6]   
 9 >>> a   
10 [1, 2, 3, 4, 5, 6] 

5.3  index

 

       index 方法用於從列表中找出某個值第一個匹配項的索引位置:

names_class2.index('李四') 

5.4  reverse

   reverse 方法將列表中的元素反向存放。

names_class2.reverse() 
print(names_class2) 

5.5  sort

 

       sort 方法用於在原位置對列表進行排序。

x = [4, 6, 2, 1, 7, 9] 
x.sort()#x.sort(reverse=True) 

5.6  深淺拷貝

現在,大家先不要理會什么是深淺拷貝,聽我說,對於一個列表,我想復制一份怎么辦呢?

 

肯定會有同學說,重新賦值唄:

names_class1=['張三','李四','王五','趙六'] 
names_class1_copy=['張三','李四','王五','趙六'] 

這是兩塊獨立的內存空間

 

這也沒問題,還是那句話,如果列表內容做夠大,你真的可以要每一個元素都重新寫一遍嗎?當然不啦,所以列表里為我們內置了copy方法:

 1 names_class1=['張三','李四','王五','趙六',[1,2,3]] 
 2 names_class1_copy=names_class1.copy() 
 3   
 4 names_class1[0]='zhangsan'
 5 print(names_class1) 
 6 print(names_class1_copy) 
 7   
 8 ############ 
 9 names_class1[4][2]=5
10 print(names_class1) 
11 print(names_class1_copy) 
12   
13 #問題來了,為什么names_class1_copy,從這一點我們可以斷定,這兩個變量並不是完全獨立的,那他們的關系是什么呢?為什么有的改變,有的不改變呢?

這里就涉及到我們要講的深淺拷貝了:

 1 #不可變數據類型:數字,字符串,元組         可變類型:列表,字典 
 2   
 3 # l=[2,2,3] 
 4 # print(id(l)) 
 5 # l[0]=5 
 6 # print(id(l))   # 當你對可變類型進行修改時,比如這個列表對象l,它的內存地址不會變化,注意是這個列表對象l,不是它里面的元素 
 7 #                # this is the most important 
 8 # 
 9 # s='alex' 
10 # print(id(s))   #像字符串,列表,數字這些不可變數據類型,,是不能修改的,比如我想要一個'Alex'的字符串,只能重新創建一個'Alex'的對象,然后讓指針只想這個新對象 
11 # 
12 # s[0]='e'       #報錯 
13 # print(id(s)) 
14   
15 #重點:淺拷貝 
16 a=[[1,2],3,4] 
17 b=a[:]#b=a.copy() 
18   
19 print(a,b) 
20 print(id(a),id(b)) 
21 print('*************') 
22 print('a[0]:',id(a[0]),'b[0]:',id(b[0])) 
23 print('a[0][0]:',id(a[0][0]),'b[0][0]:',id(b[0][0])) 
24 print('a[0][1]:',id(a[0][1]),'b[0][1]:',id(b[0][1])) 
25 print('a[1]:',id(a[1]),'b[1]:',id(b[1])) 
26 print('a[2]:',id(a[2]),'b[2]:',id(b[2])) 
27   
28   
29 print('___________________________________________') 
30 b[0][0]=8
31   
32 print(a,b) 
33 print(id(a),id(b)) 
34 print('*************') 
35 print('a[0]:',id(a[0]),'b[0]:',id(b[0])) 
36 print('a[0][0]:',id(a[0][0]),'b[0][0]:',id(b[0][0])) 
37 print('a[0][1]:',id(a[0][1]),'b[0][1]:',id(b[0][1])) 
38 print('a[1]:',id(a[1]),'b[1]:',id(b[1])) 
39 print('a[2]:',id(a[2]),'b[2]:',id(b[2]))<BR><BR><BR>#outcome 
# [[1, 2], 3, 4] [[1, 2], 3, 4]
# 4331943624 4331943752
# *************
# a[0]: 4331611144 b[0]: 4331611144
# a[0][0]: 4297375104 b[0][0]: 4297375104
# a[0][1]: 4297375136 b[0][1]: 4297375136
# a[1]: 4297375168 b[1]: 4297375168
# a[2]: 4297375200 b[2]: 4297375200
# ___________________________________________
# [[8, 2], 3, 4] [[8, 2], 3, 4]
# 4331943624 4331943752
# *************
# a[0]: 4331611144 b[0]: 4331611144
# a[0][0]: 4297375328 b[0][0]: 4297375328
# a[0][1]: 4297375136 b[0][1]: 4297375136
# a[1]: 4297375168 b[1]: 4297375168
# a[2]: 4297375200 b[2]: 4297375200

那么怎么解釋這樣的一個結果呢?

  

 再不懂,俺就沒辦法啦...

 

 


免責聲明!

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



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