Python隨記(一)列表和元組

2021-10-07 18:06:41 字數 4460 閱讀 1752

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...