List、Tuple、Set、Dictionary數據類型
一、List數據類型
1、概述:list(列表)中可以包含多個元素,且元素類型可以不相同。
每一元素可以是任意數據類型,包括列表(即列表嵌套)及後面要介紹的元組、集合、字典。
所有元素都寫在一對方括弧 "[ ]" 中,每個元素之間用逗號分隔。
對於不包含任何元素的列表,即[ ],稱位空列表。
2、列表元素索引:
(1)列表中元素的索引方式與字元串中元素的索引方式完全相同,也支援從前向後索引和從後向前索 引兩種方式
(2)與字元串相同,利用下標「[]」可以從已有列表中取出其中部分元素形成一個新列表,其語法格式為:ls[beg:end]
其中,beg是要取出的部分元素在ls中的起始下標,end是要取出的部分元素在ls中的結束下標。
注意:省略beg,則表示從ls中的第一個元素開始,等價於ls[0:end];省略end,則表示要取出的部分元素從beg位置開始
一直到最後一個元素(包括最後一個元素);beg和end都省略則取出ls中的所有元素。
(3)例如:
對於ls=[1, 2.5, 'test', 3+4j, True, [3,1.63], 5.3]這個列表,其各元素的下標為:

3、訪問單個元素:
如果只訪問列表ls中的某一個元素,則可以使用下面的寫法:ls[idx],其中,idx是要訪問的元素的下標
ls=[1, 2.5, 'test', 3+4j, True, [3,1.63], 5.3]
print(ls[2]) #輸出「test」
print(ls[-3]) #輸出「True」
注意:ls[beg:end]返回的仍然 是 一 個 列 表 ; 而ls[idx]返回的是列表中的一個元素。
4、元素修改:
通過下標「[ ]」 不僅可以訪問列表中的某個元素,還可以對元素進行修改,例如
print(ls) #輸出「[1, 2.5, 'test', (3+4j), True, [3, 1.63], 5.3]」
ls[2]=15 #將列表ls中第3個元素的值改為15
ls[1:4]=['python',20] #將列表ls中第2至4個元素替換為['python',20]中的元素
ls[0:2]=[] #將列表ls中前兩個元素替換為空列表[],即將前兩個元素刪除
注意:在對列表中的元素賦值時,既可以通過「ls[idx]=a」這種方式修改單個元素的值,也可以通過「ls[beg:end]=b」這種方式修改一個元素或同時修改連續多個元素的值。但需要注意,在通過「ls[beg:end]=b」這種方式賦值時,b是另一個列表,其功能是用b中個元素替換ls中beg至end-1這些位置上的元素,賦值前後列表元素數量允許發生變化。
二、Tuple數據類型
1、概述:Tuple(元組)與列表類似,可以包含多個元素,且元素類型可以不相同,書寫時每兩個元素之間也是用逗號分隔。與列表的不同之處在於:元組的所有元素都寫在一對小括弧「()」中,且元組中的元素不能修改。對於不包含任何元素的元組,即(),稱為空元組。
2、元組元素索引:
元組中元素的索引方式與列表中元素的索引方式完全相同。與列表相同,利用下標「[]」可以從已有元組中取出其中部分元素形成一個新元組,其語法格式為:t[beg:end]其中,t為元組,beg是要取出的部分元素在t中的起始下標,end是要取出的部分元素在t中的結束下標。
3、單一元素訪問:
如果只訪問元組t中的某一個元素,則可以使用下面的寫法:
t[idx] 其中,idx是要訪問的元素的下標
注意:字元串、列表和元組的元素都是按下標順序排列,可通過下標直接訪問,這樣的數據類型統稱為序列。其中,字元串和元組中的元素不能修改,而列表中的元素可以修改。
三、Set數據類型
1、概述:與元組和列表類似,Set {集合} 中同樣可以包含多個不同類型的元素,但集合中的各元素無序、不允許有相同元素且元素必須是可哈希(hashable)的對象。可哈希對象是指擁有__hash__(self) 內置函數的對象。列表、集合和字典類型的數據不是可哈希對象,所以它們不能作為集合中的元素。元組、字元串和數值都是可哈希對象。
2、創建集合:
集合中的所有元素都寫在一對大括弧「{}」中,各元素之間用逗號分隔。創建集合時,既可以使用{},也可以使用set函數。set函數的語法格式如下:set([iterable])其中,iterable是一個可選參數,表示一個可迭象。
注意:可迭代(iterable)對象是指可以一次返回它的一個元素,如前面學習的字元串、列表、元組都是可迭代的數據類型。
例如:1.a={10, 2.5, 'test', 3+4j, True, 5.3, 2.5}
2.print(a) #輸出「{True, 2.5, 5.3, 10, (3+4j), 'test'}」
3.b=set('hello')
4.print(b) #輸出「{'e', 'l', 'o', 'h'}」
5.c=set([10, 2.5, 'test', 3+4j, True, 5.3, 2.5])
6.print(c) #輸出「{True, 2.5, 5.3, 10, (3+4j), 'test'}」
7.d=set((10, 2.5, 'test', 3+4j, True, 5.3, 2.5))
8.print(d) #輸出「{True, 2.5, 5.3, 10, (3+4j), 'test'}」
3、注意:
與字元串、列表、元組等序列類型不同,集合中的元素不能使用下標方式訪問。集合主要用於做並、交、差等集合運算,以及基於集合進行元素的快速檢索。{}用於創建空字典,如果要創建一個空集合,則需要使用set()。
四、Dictionary數據類型
1、概述:Dictionary{字典}是另一種無序的對象集合。但與集合不同,字典是一種映射類型,每一個元素是一個鍵(key):值(value)對。鍵必須是唯一的,即不同元素的鍵不能相同;另外,鍵必須是可哈希數據,即鍵不能是列表、集合、字典等類型;值可以是任意類型。對於不包含任何元素的字典,即{},稱為空字典。
2、創建字典:
(1)既可以使用{},也可以使用dict函數。如果要創建一個空字典,可以使用{}或dict()。例如:
a={}
b=dict()
執行完畢後,a和b是兩個不包含任何元素的空字典。
(2)如果在創建字典的同時,需要給出字典中的元素,則可以使用下面的方法:
1. {k1:v1,k2:v2,…,kn:vn} #ki和vi(i=1,2,…,n)分別是每一個元素的鍵和值
2. dict(**kwarg) #**kwarg是一個或多個賦值表達式,兩個賦值表達式之間用逗號分隔
3. dict(z) #z是zip函數返回的結果
4. dict(ls) #ls是元組的列表,每個元組包含兩個元素,分別對應鍵和值
5. dict(dictionary) #dictionary是一個已有的字典
這5條語句創建的5個字典對象的元素完全相同,使用print函數查看每一個變數,都能得到如下輸出結果:
{'one': 1, 'two': 2, 'three': 3}
(3)zip函數的參數是多個可迭代的對象(列表等),其功能是將不同對象中對應的元素分別打包成元組,然後返回由這些元組組成的列表。在Python 3.x中為了減少記憶體,zip函數返回的是一對象,可以通過list函數轉換 為 列 表 , 如 通 過「list(zip(['one','two','three'],[1,2,3]))」 可 得 到 列 表「 [('one', 1), ('two', 2),('three', 3)]」。
3、訪問字典元素
與列表等序列對象不同,在訪問字典中的元素時不能通過下標方式訪問,而是通過鍵訪問。例如:
1.info={'name':'張三', 'age':19, 'score':{'python':95,'math':92}}
2.print(info['name']) #輸出「張三」
3.print(info['age']) #輸出「19」
4.print(info['score']) #輸出「{'python': 95, 'math': 92}」
5.print(info['score']['python']) #輸出「95」
6.print(info['score']['math']) #輸出「92」

