四、 python中的數據類型——列表

列表(list)

列表是一種有序的集合,有點類似c里面的數組。它的特點是,可以隨時向里面添加或刪除其中的元素,在python中經常用來存放數據。列表的特點是中括號,內部元素用逗號隔開。

1. 在python中使用如下方法定義列表

a = []  #這時候a就是一個空的列表
name = ['Tom']  #這時候name是一個列表,里面有一個字符串,也就是'Tom'
classmates = ['Michael', 'Bob', 'Tracy']  #classmate是一個含有三個字符串的列表
list1 = ['Monday', 1, 2.5]  #list1中有三個元素,字符串、整型、浮點型

在這個列表中,可以放進去任何元素,不論你的元素是字符串、整型、浮點型、還是布爾值、空值,包括列表什么的,都可以放進去。
元素與元素之間,用逗號隔開。

2. 使用索引值獲取列表中的值

列表會為每個元素分配序號,這個序號代表它的位置,稱為索引(index),第一個元素的位置是0,第二個元素是1,以此類推。

>>> classmates = ['Michael', 'Bob', 'Tracy']  #定義一個列表
>>> print(classmates[0])  #classmates[0]表示classmates中的第一個元素
Michael
>>> b = classmates[1]  #將classmates中的第二個元素賦值給b
>>> print(b)  #打印b的值
Bob

使用索引獲取列表中的值時,需要使用中括號來訪問,在中括號前面加上列表名,中括號內部是元素的索引。
0代表第一個元素的位置,1代表第二個,-1代表倒數第一個,-2代表倒數第二個

>>> classmates = ['Michael', 'Bob', 'Tracy']  #定義列表
>>> print(classmates[-1])  #打印倒數第一個元素
Tracy
>>> print(classmates[-2])  #打印倒數第二個元素
Bob

使用len()函數,可以查看列表里面有多少個元素

>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> print(len(classmates))
3

3. 添加元素

在python中,列表的操作是非常的靈活的,我們可以向其中添加或刪除元素。
添加使用list.append()函數

>>> classmates = ['Michael', 'Bob', 'Tracy']  #定義列表
>>> classmates.append('Tom')  #在classmates結尾加入'Tom'這個字符串元素
>>> print(classmates)  #打印classmates這個列表
['Michael', 'Bob', 'Tracy', 'Tom']

list.append()函數是將元素插入到列表的末尾,當我們想在特定位置插入元素時可以使用list.insert()函數

>>> classmates = ['Michael', 'Bob', 'Tracy']  #定義字典
>>> classmates.insert(1,'Tom')  #在索引位置1插入'Tom'
>>> print(classmates)  #打印列表
['Michael', 'Tom', 'Bob', 'Tracy']

list.insert()函數接受兩個參數,第一個參數是插入位置,第二個參數是要插入的元素。

需要注意的是,在使用append和insert時,必須在前面注明要操作的列表。就像上面的例子,我們要操作classmates這個列表,所以必須寫成classmates.append()classmates.insert(),如果不這么寫,計算機就不知道你要往哪個列表中加入元素。

沒有特殊情況的話,推薦使用append()函數添加元素,因為使用append的時候,元素默認加在列表尾部,不會造成其他元素索引值的改變。如果使用insert的話,就像上面的insert(1,'Tom'),在位置1插入'Tom'后,Tom后面所有的元素,索引值都加了一個1,列表中元素越多,受影響的程度越大,因此使用append()函數要比insert()函數更快。

4. 刪除元素

刪除列表中元素的方法有三種

  1. 使用del刪除元素
>>> names = ['Michael', 'Bob', 'Tracy']  #定義列表
>>> del names[1]  #使用del 刪除names中的第二個元素
>>> print(names)  #打印列表
['Michael', 'Tracy']

del后面需要用索引的方式表明要刪除的元素,也就是上面的例子,names[1]代表names中的第二個元素,使用del即可刪除

  1. 使用list.pop()函數刪除
>>> names = ['Michael', 'Bob', 'Tracy']  #定義列表
>>> names.pop(1)  #刪除names中的第二個元素
'Bob'
>>> print(names)   #打印列表
['Michael', 'Tracy']

list.pop()函數與del差不多,都是使用索引值進行刪除,只不過寫法不同。
我們可以發現,執行names.pop(1)后,python shell打印出了第二個元素的值,也就是我們要刪除的那個值,這是因為pop()這個函數,是有返回值的,有時候我們需要使用這個值,這個時候就可以用變量存起來。

>>> names = ['Michael', 'Bob', 'Tracy']  #定義列表
>>> a = names.pop(1)  #刪除names中的第二個元素,并把它賦值給a
>>> print(names)  #打印列表
['Michael', 'Tracy']
>>> print(a)  #打印a
Bob

這樣我們就可以通過調用a而使用剛才刪掉的元素了。

  1. 使用list.remove()函數刪除
>>> names = ['Michael', 'Bob', 'Tracy', 'Bob']  #定義列表
>>> names.remove('Bob')  #刪除'Bob'
>>> print(names)  #打印列表
['Michael', 'Tracy', 'Bob']

list.remove()函數的作用是刪除第一個匹配的元素,上面的例子中,names這個列表里面,有兩個'Bob',remove函數只刪除了第一個'Bob'。這就是list.remove()函數的特點。

  1. 使用list.clear()清空列表
    list.clear()可以清空列表,刪除內部所有的元素
>>> names = ['Michael', 'Bob', 'Tracy', 'Bob']  #定義列表
>>> names.clear()  #清空列表
>>> print(names)  #打印列表
[]

5. 列表的切片

有時候我們想使用列表的前10個元素,或者前n個元素,這時候就應該使用列表的切片。

>>> names = ['Michael', 'Bob', 'Tracy', 'Tom', 'Jack']  #定義列表
>>> print(names[1:3])  #打印names中的第二個元素到第三個元素
['Bob', 'Tracy']

切片和索引類似,都是使用中括號,區別是,索引中的中括號里面只有一個數,而切片不同。切片是切割列表,形成切割下來的部分形成新的列表。

切片:list[start:end:[step=1]],這就是切片的表達式,要求start和end兩者必須有一個,step不是可以不指定,不指定的時候默認為1。

切片該怎么理解呢,start就是開始的位置,end就是結束的位置。切片有個特點是“取前不取后”,看上面那個例子可以發現,1作為start,3作為end,1代表第二個元素,3代表第四個元素,列表切片的時候,是不取后面的那個數字對應的元素的,也就是不取第四個元素,所以names[1:3]只取了第二個元素和第三個元素,這就是所謂的取前不取后。

再看下一個例子。

>>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  #定義列表
>>> print(numbers[:5])  #打印第一個元素的到第五個元素
[0, 1, 2, 3, 4]
>>> print(numbers[0:5])  #同上
[0, 1, 2, 3, 4]
>>> print(numbers[5:])  #打印第六個元素到最后一個元素
[5, 6, 7, 8, 9, 10]
>>> print(numbers[5:len(numbers)])  #同上
[5, 6, 7, 8, 9, 10]
>>> print(numbers[:])  #不設定start和end
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

當不指定start或者end的時候,start默認為0,end默認為最后一個元素的索引值+1,因為“取前不取后”,要想取到最后一個元素,必須加個1才行。
上例中,用len(numbers)表示了最后一個元素的索引值,因為索引值從0開始,最后一個元素的索引值一定是列表內元素個數-1,根據“取前不取后”,在end位置上的數字應該+1,所以最后就等于len(numbers)了。
當不設定start和end的時候,就默認取所有的元素了。

>>> numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> print(numbers[::2])
[0, 2, 4, 6, 8, 10]
>>> print(numbers[1::2])
[1, 3, 5, 7, 9]

當加入step,這個選項后,step代表步長,默認為1,設定成2的時候,就是隔一個取一個,設定成3時就是隔兩個取一個。
上例中,第一個切片,start和end均未設定,因此從第一個元素開始,隔一個取一個,得到了所有奇數位置的元素。
第二個切片,start設定為了1,因此取了所有偶數位置的元素。

6. 其他操作

  1. 組合
    使用'+'號可以將兩個列表組合起來。
>>> a = [1, 2, 3]  #定義列表
>>> b = ['a', 'b', 'c']  #定義列表
>>> print(a+b)  #打印列表a和列表b組合成的新列表
[1, 2, 3, 'a', 'b', 'c']
  1. 重復
    使用'*'號進行重復,后面寫上重復次數,如下:
>>> a = ['a', 'b']  #定義列表
>>> print(a*3)  #打印列表a重復3次的新列表
['a', 'b', 'a', 'b', 'a', 'b']
  1. 求最大值與最小值
    最大值和最小值分別使用max(list)min(list)
>>> a = [1, 2, 3]  #定義列表
>>> print(max(a))  #打印最大值
3
>>> print(min(a))  #打印最小值
1
  1. 求和
    使用sum(list)進行求和
>>> a = [1, 2, 3]
>>> print(sum(a))
6
  1. 統計某元素出現次數
    使用list.count()函數可以統計某元素在列表中出現的次數。
>>> a = [1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> print(a.count(2))
3
  1. 排序
    使用list.sort()函數可以對原來的列表進行從小到大排序。
>>> a = [5, 3, 2, 5, 7, 1]
>>> a.sort()
>>> print(a)
[1, 2, 3, 5, 5, 7]
  1. 反轉
    使用list.reverse()函數可以將列表中的元素反向排練。
>>> a = [1, 2, 3, 5, 5, 7]
>>> a.reverse()
>>> print(a)
[7, 5, 5, 3, 2, 1]
  1. 判斷某元素是否在列表內
    使用in可以判斷某元素是否在列表內,in是“在……中”的含義
>>> a = [1, 2, 3, 5, 5, 7]
>>> print(3 in a)
True
>>> print(0 in a)
False

3在列表中,0不在列表中,所以3 in a是True,而0 in a是False

  1. 復制
    有些時候,我們想再創建出一個和現有列表一模一樣的列表,這時候應該使用list.copy()函數
>>> a = [1, 2, 3, 5, 5, 7]
>>> b = a.copy()
>>> print(b)
[1, 2, 3, 5, 5, 7]

更多關于列表的信息可以通過使用help(list)查看幫助文檔。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容