1. 程式人生 > >python列表內置辦法

python列表內置辦法

匹配 分享 png ges 補充 真的 序列 bsp 不能

對應操作:

1 查([])

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

2 增(append,insert)

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

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

3 改(重新賦值)

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

4 刪(remove,del,pop)

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

5.1 count

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

1 2 3 4 5 6 7 >>> [‘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 2 3 4 5 >>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> a.extend(b) >>> a [1, 2, 3, 4, 5, 6]

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

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

5.3 index

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

1 names_class2.index(‘李四‘)

5.4 reverse

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

1 2 names_class2.reverse() print(names_class2)

5.5 sort

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

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

5.6 深淺拷貝

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

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

1 2 names_class1=[‘張三‘,‘李四‘,‘王五‘,‘趙六‘] names_class1_copy=[‘張三‘,‘李四‘,‘王五‘,‘趙六‘]

這是兩塊獨立的內存空間

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

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

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

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

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

技術分享圖片技術分享圖片

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

列表補充:

b,*c=[1,2,3,4,5]

python列表內置辦法