python中最基本的資料結構就是序列了。python一共包含6種內建序列:列表、元組、字串、unicode字串、xrange物件、buffer物件。序列都可以進行的操作包括索引,切片,加,乘,檢查成員。
本篇隨記先講兩個最基礎的序列:列表和元組。其實這兩個很像c++中的陣列結構,但是有其本身的特點,各位學習的過程中可以自己聯想其中的共通性,但是不要搞混淆。
列表是最常用的python資料型別,它可以作為乙個方括號內的逗號分隔值出現。
建立乙個列表,只要把逗號分隔的不同的資料項使用方括號括起來即可。如下所示:
list1 = [1, 2, 3, 4, 5 ];
list2 = [『a』 , 』b』 , 』c』 ,』d』 , 』e』 , 』f』 ];
列表的資料項不需要具有相同的型別:
list3 = ['a', 'b', 1, 2];
這三個list作為例子下文會用到。。。
序列中的所有元素都是有標號的,和其他很多語言一樣,是從0開始的。
可以通過索引來訪問列表中的某個元素,如list3[0]的值就是『a』,
索引可以為負數,但是最後乙個元素的索引對應的是-1,只有正序第乙個元素的索引為0。
分片操作用來訪問一定範圍內的元素,分片通過冒號隔開的兩個索引實現。這兩個索引作為邊界,第1個索引包含在分片內,第2個索引是剩下的元素中的第乙個元素的索引。比如list[m : k+1]其實是指的是索引為 m~k這個區間的元素。
以上文中提到的三個list來舉例哈:
① 普通情況:
如list2[1: 4]=[『b』, 『c』, 『d』]
list2[0: 6] =[『a』, 』b』 , 』c』 ,』d』 , 』e』 , 』f』 ];,雖然我們的索引其實只是0到5,但是這裡第二個邊界寫6是可以的,因為只取到索引為(6-1)的這個元素為止,並沒有超出list2的大小。
②這裡的索引同樣可以為負數:
list2[-4 : - 1] = [『c』, 『d』, 『e』],注意這裡第二個邊界雖然寫的是-1,但是同樣是不能把索引為 -1的這個元素包含進去的,那麼我現在想把最後乙個元素也包含進去該怎樣做?
list2[ -4: ] = [『c』, 『d』, 『e』, 『f』],就是說直接把第二個邊界空著,它就會一直包含到底。
③其他步長的情況:
其實在分片時,不止可以提供兩個邊界,還可以提供第三個引數,步長。前面不寫,程式就是用的預設步長:+1.
list2[0: 6,2] =[『a』 , 』c』 , 』e』 ]
這裡步長為2,所以取的其實就是list2[0]、list2[0+2]、list2[0+2*2]這三個元素。
④逆序(步長為負數)
前面的三種情況,我們輸出的列表的元素的順序和原來列表的順序是一致的,因為預設的步長是+1!其實也可以倒著輸出,這時候把步長設定為負數就好。注意,步長為負數時,第乙個邊界對應的索引應該比第二個邊界大,這樣才能倒著輸出:
list2[6:0,-1] =[『f』, 『e』, 『d』, 『c』, 『b』, 『a』];
注意,此處來個對比:
list2[0:6, 2] =[『a』 , 』c』 , 』e』 ]
list2[6:0,-2] =[『f』 , 』d』 , 』b』 ]
乙個是正序,乙個是逆序,只不過步長的絕對值是2,這樣能看出區別來,不要以為逆序就是簡單的把正序給倒過來而已。
list2[0:6, 2]取的其實就是list2[0]、list2[0+2]、list2[0+2*2]這三個元素!
list2[6:0,-2]取的是list2[5]、list2[5-2]、list2[5-2*2]這三個元素!為什麼這樣呢,因為倒序時,我的第乙個邊界其實就是剛才正序時的尾邊界,所以仍然要執行減一這個操作!
這一步其實很像c++中字串string類的操作,就是兩個相同型別的序列相加之後得到乙個新序列。何謂相同型別,就是我最開始說的序列包含6個種類,(一定不要把序列(sequence)和列表(list)搞混啊,列表只是序列的一種,序列是個大概念),相同種類的序列才能相加。
用數字k乘以乙個序列會生成乙個新的序列,而新的序列中,原來的元素將會被重複k次。
空列表:[ ]
如果想要構造乙個佔k個元素空間的空列表,可以有[none] * k。
檢查乙個值是否在列表中,可以使用in運算子。返回值為false或者true。
①賦值和分片賦值(太簡單不講了)
這裡有個點要注意!!!:
如果已有乙個列表list1,使用賦值 y=list1, 其實並沒有新建立乙個列表。
這樣的操作使得y和list1指向同乙個列表,有點c++中引用的意思。
正確的給新的列表的賦值的方式是 y = [ : ],這樣就得到乙個新的列表且元素和y一模一樣了。
②刪除元素:就是用del語句實現(delete的前三個字母)
7、 基本的列表方法
list1 = [1, 2, 3, 4, 5 ];
list1= [1, 2, 3, 4, 5, 9 ]
②count方法統計某個元素在列表**現的次數,返回值就是次數
③extend,在列表的末尾一次性追加另乙個序列中的多個值。就是可以用新列表擴充套件原有列表。
list1 = [1, 2, 3, 4, 5 ];
list2 = [『a』 , 』b』 , 』c』 ,』d』 , 』e』 , 』f』 ];
list1.extend( list2)
list1 = [1, 2, 3, 4, 5, 『a』 ,』b』 , 』c』 ,』d』 , 』e』 , 』f』 ];
看起來很像加法,實則不然!這個操作中,list1的值已經更新了,是對list1的操作。而加法運算,兩個序列相加後,原來的兩個序列還在,沒變,產生的新的序列占用的是新開闢的記憶體空間。
④index用於從列表中找出某個值第乙個匹配項的索引位置
⑤insert用於將物件插入到列表
list1 = [1, 2, 3, 4, 5 ]
list1. insert(3,『a』)
list1 = [1, 2, 3, 『a』, 4, 5 ]
可見把原來索引為3的元素4以及後面的元素5都依次後移,然後在索引為3的位置插入了新的元素。
⑥pop 移除列表的乙個元素,預設是最後乙個。它是惟一乙個既返回數值,且同時修改原列表的列表方法。
list1.pop( ) 預設移除最後乙個元素
list1.pop(2) 移除索引為2的元素,是以索引為參考
⑦remove 移除列表中某個值的第乙個匹配項
個人感覺這個操作相當於,先用index找出你要的找的這個元素的索引,然後我用pop( )方法去移除這個索引位置的元素。現在這兩個操作融合到一起,就成了remove(這是我自己的感覺,有錯誤還請指正0-0),直接找元素然後刪元素。
⑧reverse 將列表中的元素反向存放
⑨sort 用於在原位置對列表進行排序,意味著也是要改變原來的列表而不是簡單的返回乙個副本而已。
如果你想既要有原來的列表,又要有換序後的列表.有兩種操作方法,
a、y=list1[ : ]
y.sort( )
這樣list1還在,而y是換序後的列表
b、 使用sorted 函式
y = sorted ( list1)
元組與列表一樣,也是一種序列。唯一的不同是元組不能修改(字串同樣也不能修改)
如果用逗號分隔開了一些值,那麼就自動建立了元組。
如:輸入 2,3,4
得到(2,3,4)
元組大部分時間是通過圓括號括起來的。
注意,如果要建立乙個只有乙個元素的元組,同樣要新增逗號。
>>>123
>>>123,
(123,)
>>>(123,)
(123,)
list()函式將元組轉化為列表
輸入list( (1, 3, 5, 7) )
就等於[1, 3, 5, 7]
,tuple函式將列表轉化為元組
輸入tuple( [2, 4, 6, 8] )
就得到 (2, 4, 6, 8)
因為元組不可變,所以其實基本上就是建立和訪問元組這些操作,沒有像列表那麼多的操作。
訪問通過索引方式訪問,分片也一樣的操作。
①元組可以在對映(和集合的成員)中當作鍵使用,而列表不行
②元組作為很多內建函式和方法的返回值存在。
Python學習筆記一 列表和元組
python 學習筆記 建立列表 利用中括號來表示,並可以通過 index 來查詢成員 mean 1,2,a 策策 l 利用 extend 來向乙個列表新增成員,用乙個列表擴充套件另乙個列表 mean1 1,2,a 策策 mean.extend mean1 mean 1,2,a 策策 葫蘆娃 1,2...
一文看懂Python(一) 列表和元組篇
member 胖虎 大熊 小夫 小叮噹 小妹妹 membermix 1 胖虎 3.14 1,2,3 mixempty empty 董金琨 member 1.4.2 extend list 向原列表中新增另乙個列表,以乙個列表來擴充套件另乙個列表,list是乙個列表型別member.extend 胖虎...
Python (二)列表 元組
一 列表 相當於c中的陣列,內部的元素是可以改變的,對元素進行增刪改以及進行插入操作。是一種有序的集合 建立list list1 test1 test2 test3 訪問元素 通過下標進行索引 list1 2 列表的下標從0開始,在元素的個數減1的位置結束。末尾追加元素 指定位置插入元素 listt...