1. 程式人生 > >Python全棧之路----資料結構—列表

Python全棧之路----資料結構—列表

     1.列表是一個數據的集合,集合內可以放任何資料型別,可對集合進行方便的增刪改查操作。列表裡面的數可以重複。

L1 = [ ] #定義空列表          
L2 = [ 'a' , 'b' , 'c' , 'd' ] #存四個值,索引為0-3       
L3 = [ 'abc' , [ 'def' , 'ghi' ] ] #巢狀列表

     2.列表的功能:

      建立,查詢( L[n]索引值為n的元素;L.count(n)查詢有多少個元素為n;L.index(n)查詢元素為n的索引值),切片,增加(L.append(n)在最後加入為n的元素;L.insert(m,n)在索引值為m的位置插入元素n),修改,刪除(L del[n]刪除索引值為n的元素;L.remove(n)刪除從左邊數第一個為n的元素;L.pop()刪除最後一個元素,返回最後一個元素的值),迴圈,排序(字元和數字單獨排序,L.sort()正序 ;L.reserve()倒序)。

 1 >>> L2 = ['a','b','c','d','e',1,2] #建立一個列表
 2 >>> L2[2] #通過索引取值
 3   'c'
 4  >>> L2[-1] #通過索引從裂變右邊開始取值
 5   2
 6  >>> L2.index('a') #返回指定元素索引值,從左向右查詢,找到第一個匹配的字元的位置
 7   0
 8  >>> L3 = [1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,5,5,8,8,8,8,8,8]
 9  >>> L3[2] #
通過索引值取值 10 1 11 >>> L3.count(3) #查詢有多少個字元為3的索引 12 7 13 >>> n = L3.index(2) 14 >>> L3[n] #n是L3種2的索引值,L3[n]是索引值為n的元素 15 2 16 >>> L3[L3.index(2)] 17 2 18 >>> L3[0:3] #列表切片,顧頭不顧尾 19 [1, 1, 1] 20 >>> L3[-5:-1] #後面的列表切片,顧頭不顧尾 21 [8, 8, 8, 8] 22
>>> L3[-5:] #-5位置的字元及其後面的所有字元 23 [8, 8, 8, 8, 8] 24 >>> L3[:3] 25 [1, 1, 1] 26 >>> L3[:] #和L3輸出結果一致 27 [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8] 28 >>> L3[:7:2] #0-6切片,先取L3[0],然後每兩個取一個 29 [1, 1, 1, 2] 30 >>> L3[:9:3] #3叫做步長 31 [1, 1, 2] 32 >>> L3.append('Alex') #在列表最後面追加字元 33 >>> L3 34 [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8, 'Alex'] 35 >>> L3.insert(0,'Jane') #在列表索引值為0的位置插入資料Jane 36 >>> L3 37 ['Jane', 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8, 'Alex'] 38 >>> L3[3] = 'Mary' #把索引值為3的位置的元素替換成Mary 39 >>> L3 40 ['Jane', 1, 1, 'Mary', 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8, 'Alex'] 41 >>> L3[4:6] = 'PeiQi' #批量修改,由於位置不夠,PeiQi被拆分,後面的元素後移 42 >>> L3 43 ['Jane', 1, 1, 'Mary', 'P', 'e', 'i', 'Q', 'i', 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8, 'Alex'] 44 >>> L3.pop() #刪除最後一個元素,返回最後一個元素的值 45 'Alex' 46 >>> L3.remove(4) #刪除從左邊數第一個為4的元素 47 >>> L3 48 ['Jane', 1, 1, 'Mary', 'P', 'e', 'i', 'Q', 'i', 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8] 49 >>> del L3[3] #全域性性指令,刪除索引值為3的元素 50 >>> L3 51 ['Jane', 1, 1, 'P', 'e', 'i', 'Q', 'i', 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8] 52 >>> del L3[8:16] #批量刪除,顧頭不顧尾 53 >>> L3 54 ['Jane', 1, 1, 'P', 'e', 'i', 'Q', 'i', 3, 3, 3, 3, 3, 4, 4, 5, 5, 8, 8, 8, 8, 8, 8]

(3)列表是有序的,但int和str型別不能一起排序。str按照ASCII排序,sort是排序,reverse是順序反過來,extend是擴充套件,clear是把整個列表清空,copy是拷貝。

copy:  檢視記憶體地址  id(i)  變數有地址,列表本身有一個地址,列表中的每一個元素又都有自己單獨的地址

          如果 a = 1   a = b  ,b指向的是1,不是a,b不隨著a的變化而變化;

          如果L1 = L ,L1指向L的記憶體地址,將L的記憶體地址比作一個裝了很多水果的果盤,那麼L1也指的是這個果盤,那麼L變化實際是果盤變化,所以L1隨L的變化而變化,同時L也會隨L1的變化而變化;

          如果L1 = L.copy(),將L的記憶體地址比作一個裝了很多水果的果盤,那麼L1指的是將這個果盤複製的一個新果盤,但是果盤裡的水果並沒有被複制,水果是兩個果盤共享,所以L變化是舊果盤變化,新果盤不變,所以L1不隨L的變化而變化;