Python數(shù)據(jù)結構詳解(三)- 列表與元組

學習一門語言,了解其數(shù)據(jù)結構是基礎。由于Python是動態(tài)編程語言,所以在定義變量時并不需要事先指定變量的數(shù)據(jù)類型,變量的聲明和初始化是同時進行的。
Python有如下五大數(shù)據(jù)結構類型:
1、Number類型
2、字符串類型
3、列表,元組
4、字典
5、集合
下面我們逐一來了解一下~
本篇主要介紹列表與元組,是數(shù)據(jù)結構類型介紹的第三篇。
前兩篇關于Number類型和字符串類型的介紹,可以搜索訂閱號《Python寶典》。
三、列表與元組
之所以將列表與元組放到一起,是因為這兩個數(shù)據(jù)類型很相似,可以將元組理解為只讀的列表結構。
1.1 列表
1.1.1 列表的表達方式
列表的元素和數(shù)量可以是任意的,可能只有幾個元素,也可能有成千上萬個元素,每個元素的類型可以是相同的,也可以是不同的,列表中區(qū)分元素順序,也允許包含重復元素。
下面來看下如何定義一個列表。
1.1.2 列表的基本操作
索引和切片
列表的操作基本都是索引來實現(xiàn)的。
索引編號默認是從0開始的,并且在python中,還支持反向索引,用負數(shù)表示:
切片操作可以從列表中根據(jù)指定的開始索引與結束索引來獲取一個新的子列表,切片有如下幾個特點:
(1)切片截取的是左開右閉區(qū)間,s[1:3]取的是s[1]與s[2];
(2)結束索引若為0,會獲取一個空列表;
(3)結束索引在列表中的位置若小于等于開始索引在列表中的位置,也會返回一個空列表;
(4)切片默認步長是1,也可以手動指定,但步長不能為0,否則會拋出異常。
列表的加法與乘法
加法操作使用加號(+)完成,表示把加號兩端的列表變量連接形成一個新列表;
乘法操作使用星號(*)完成,表示對當前列表對象進行復制并連接,并形成一個新列表。
會拋出異常

可以使用 in 運算符檢查某個元素是否在列表中,返回True / False
列表元素的修改與刪除
列表元素的修改是通過索引來實現(xiàn)的。
列表的刪除很簡單,使用 del 語句即可。
1.1.3 多維列表
所謂多維列表,就是列表的元素還是列表,列表的元素還是列表……
呃……還是以二維舉例吧~
上面是最基本的創(chuàng)建二維列表的方式,但有時候二維列表是根據(jù)已有的條件來創(chuàng)建。
這邊用到了列表解析生成二維列表的方式,現(xiàn)在看不懂沒關系,看完下面章節(jié)再回頭來看這里就明白了。
1.1.4 列表解析
列表解析(或稱列表推導)是根據(jù)已有列表,高效創(chuàng)建新列表的方式。
列表解析是Python迭代機制的一種應用,常用于創(chuàng)建新的列表。
解析語法:[expr for_var in iterable]
這個語句的核心是 for 循環(huán), 它迭代 iterable 對象的所有條目,前邊的 expr 是生成列表元素的表達式。
舉個栗子~
1.2 元組
1.2.1 元組的表達方式
元組與列表一樣,也是一種列表,唯一不同的是元組不能修改,將元組理解為只讀的列表更容易幫助理解。
下面來看下如何定義一個元組。
可以看到,元組是用圓括號()括起來的,并且在定義的時候可以不需要加圓括號。
也可以將元組分配給多個變量。
利用這個特性,可以很容易的實現(xiàn)變量交換,而無需中間變量。
上面栗子中,變量的數(shù)量與元組中的元素數(shù)量是相同的,否則會拋出異常。
問題來了,如果元組中元素很多,比如有100個,難道需要定義100個變量么?
其實不用這么麻煩,只需要將部分元素賦給變量,其余元素轉化為子列表即可,上栗子~
在上面代碼中,右側的元組有9個元素,而左側只有3個變量,如果按以前的邏輯,執(zhí)行這行代碼肯定是要拋出異常的,但由于z變量前面有一個 *,這就是通配符,如果放在一個變量前面,表示列表,也就是說,變量z本身就是一個列表。
Python解析器首先會按列表中元素的順序和匹配對應的單個變量,剩下的值都給列表變量,也就是z。所以執(zhí)行這行代碼后,x和y的值分別是1和2,而z的值是[3, 4, 5, 6, 7, 8, 9]。
需要注意的是,左側變量中只能由一個帶 * 的變量,否則python解析器無法確定列表的范圍。

最后,再來看看如何定義只含一個元素的元組。
從上面栗子可以看出,定義一個元素的元組需要在末尾加上逗號,否則就只是一個普通的值,并非元組。
1.2.2 元組的基本操作
訪問:元組和列表一樣,也是通過索引來訪問具體的元素;
修改:元組是只讀的,不支持元素的修改;
刪除:元素值不允許刪除的,但可使用 del 語句刪除整個元組。
1.3 相關函數(shù)與方法
1.3.1 列表與元組常用的函數(shù)

1.3.2 列表與元組常用的方法

1.4 列表與元組的差異
總結一下列表與元組的差異點:
可變性:列表是可變的(Mutable),也就是說,它們的元素可以通過索引進行修改、刪除或添加,而元組是不可變的(Immutable),一旦創(chuàng)建就不能被修改。
語法:列表用方括號([])來表示,元素之間用逗號(,)分隔,而元組用圓括號(())來表示,元素之間也用逗號(,)分隔。如果元組只有一個元素,則需要在元素后面加上一個逗號。
使用場景:一般來說,當我們需要在程序中存儲一些可以被修改的數(shù)據(jù)時,應該使用列表。而當我們需要在程序中存儲一些不可修改的數(shù)據(jù)時,應該使用元組。
性能:由于元組是不可變的,因此在一些情況下它們比列表更快,尤其是當元組作為字典的鍵時。
內(nèi)存:一般來說,創(chuàng)建元組類型tuple的變量比列表類型list要快,而且占用更小的存儲空間。
線程安全:元組類型變量的元素不可更改性,可保證多線程讀寫時的安全問題。
下篇開始介紹字典,如果覺得小編寫的不錯的話,麻煩給個關注,點贊、轉發(fā)~