學習目标:
- 掌握四種複合資料類型的定義
- 掌握四種複合資料類型的使用流程
- 掌握類型轉換和格式化輸出的方法
- 掌握元組和清單的差別
- 熟悉複合資料類型在實際項目中的使用技巧
- 了解四種複合資料類型的使用差別
思維導圖
4.1 List(清單)
4.1.1 清單的建立
建立清單:
變量名 = [元素1,元素2,…,元素n]
list類型中區分元素的順序,且允許包含重複的元素。
4.1.2 基本操作
1. 索引
清單每一個元素都對應一個整數型的索引值,可以通過索引值來得到相應的元素值。同時支援清單元素的正向索引和反向索引。
正向索引即索引值為正,從0開始;
反向索引即索引值為負,從-1開始。若是反向索引,則-1為末尾元素對應的索引編号。
2. 切片
切片操作可以截取清單變量中的部分元素,并傳回一個子清單變量。
切片操作中,生成子清單的元素包含起始索引對應的元素,但是不包含終止索引對應的元素。
3. 加法和乘法
- 加法操作使用加号(+)完成,表示把加号兩端的清單變量連接配接形成一個新清單;
- 乘法操作使用星号(*)完成,表示對目前清單對象進行複制并連接配接,并形成一個新清單。
4. 修改和删除
- 通過索引值對相應元素進行修改或删除。
- 删除整個清單或清單中的部分元素,使用del指令。删除整個清單後,不可再次引用。
5. 追加插入和擴充
- append:在目前清單對象尾部追加元素;
- insert:在目前清單的指定索引位置插入元素;
- extend:對目前清單元素進行批量增加。
4.1.3 多元清單
建立三個清單類型的變量a、n和x。其中,變量a和n中元素都是基本類型,變量x中的元素都是清單類型。
>>> a = ['a',1]
>>> n = ['b',2]
>>> x = [a,n]
>>> x
[['a',1],['b',2]]
>>> x[0] # 顯示第一個元素
['a', 1]
>>> x[0][1] # 顯示第一個元素中的第二個元素
1
直接輸入清單的資料,系統會根據輸入生成相應的清單次元。
>>>l = [[1,2,3],[4,5,6]]
>>>print(l)
輸出結果:
[
[1,2,3],
[4,5,6]
]
也可以使用清單解析方式生成了二維矩陣
cols = 7
rows = 9
list_2d = [[col + 1 for col in range(cols)] for row in range(rows)]
print(list_2d)
4.1.4 疊代器
首先建立了一個清單類型變量lst,然後建立了該清單的疊代器對象lstiter,并且通過該疊代器對象的next()方法周遊清單中的元素。
__next__()方法,傳回下一個值。iter方法通路清單。
4.1.5 清單解析
>>>list=[1,2,3,4,5,6,7,8,9,10] #方法1:直接指定
>>>list=[]#方法2:先建立一個空清單,然後通過for循環實作
for n in range(1,11):
list.append(n);
>>>list(range(1,11)) #方法3:清單解析
[1,2,3,4,5,6,7,8,9,10]
for循環在這裡可以很好的生成list
首先針對數值運算,使用清單解析生成了1到10的平方值;
其次,針對字元運算,使用清單解析生成了指定範圍的字母組合清單。
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 或者字母所進行的兩層循環
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
4.1.6 清單函數和方法
4.2 tuple(元組)
4.2.1 元組的建立
建立元組:
變量名 = (元素1,元素2,…,元素n)
注意:
當元組中隻包含一個元素時,需要在元素後面添加逗号,否則括号會被當作運算符使用。
4.2.2 基本操作
1. 通路
使用下标索引來通路相應的元素值。也可采用正向索引和反向索引兩種方式,并支援切片操作。
2. 修改
元組中的元素值是不允許修改的,可以對元組進行連接配接生成新的元組。
3. 删除
元素值不允許删除的,但可使用del語句删除整個元組。
需要注意的是,删除後的元組對象不可再次引用。
4. 統計
通過内置的count方法統計某個元素出現的次數。
5. 查找
通過内置的index方法查找某個元素首次出現的索引位置。
4.2.3 元組函數和方法
表中的count方法和index方法,實際是元組類型和清單類型所共有的方法,其使用方法和清單完全相同。
4.2.4 元組的優勢
- 可以使函數傳回多個值
- 可以使程式運作性能提升
- 一般來說,建立元組類型tuple的變量比清單類型list要快,而且占用更小的存儲空間。
- 使用元組是線程安全的
- 元組類型變量的元素不可更改性,可保證多線程讀寫時的安全問題。
4.3 dict(字典)
4.3.1 字典的建立
建立字典對象:
變量名=(key1:value1, key2:value2,…, keyn:valuen)
- 字典的元素是可變的,可以是清單、元組、字典等任意資料類型,但鍵(key)值必須使用不可變類型。
- 在同一個字典變量中,鍵(key) 值必須是唯一的。
4.3.2 基本操作
1. 通路
字典是無序的,沒有索引,不能通過下标索引。通過對key值的索引進行通路。
2. 修改
通過對key值的引用對value值的修改操作。
3. 删除
字典的删除操作中,可以删除某個元素或删除整個字典,也可以清空字典元素。.
4.3.3 字典的嵌套
>>>Va1 = {a:{b:1,c:2},d:{e:3,f:4}} #字典的value值是字典
>>>Va2 = {a:[1,2,3],b:[4,5,6]} #字典的value值是序列
>>>n1={'surname':'wang','name':'gang'}
>>>n2={'surname':'zhang','name':'san'}
>>>n3={'surname':'liu','name':'wen'}
>>>n4=[n1,n2,n3] #序列的元素是字典
n1、n2、n3是字典類型的變量,n4是清單類型變量,且n4中的元素即為n1、n2、n3。
4.3.4 字典的周遊
username={'full_name':'ZhangWei', 'surname':'Zhang', 'name':'Wei' }
#周遊所有的鍵-值對
for k,v in username.items():
print('key:'+k)
print('value:'+v+'\n')
#周遊所有鍵
for k in username.keys():
print(k)
print('key:'+k+'-value:'+username[k])
#周遊所有的值
for v in username.values():
print(v)
4.3.5 字典函數和方法
4.4 set(集合)
4.4.1 集合的建立
建立集合對象:
變量名 = {元素1,元素2,…,元素n}
集合特性:
- 無序性:元素之間沒有确定的順序。
- 互異性:不會出現重複的元素。
- 确定性:元素和集合隻有屬于或不屬于的關系。
注意:
建立空集合用set();
{}建立一個空字典。
4.4.2 集合的數學運算
數學運算後依然保持集合的特性,沒有重複的元素
4.4.3 基本操作
1. 更改
- add():添加一個元素
- update():同時添加多個元素。
2. 删除
- discard() 和 remove() 方法删除集合中特定的元素。
- 若删除的對象不存在,remove()方法會引起錯誤,discard()方法不會。
4.4.4 不可變集合
4.4.5 集合函數和方法
4.5 類型轉換和格式化輸出
4.5.1 類型轉換
不可變資料類型:
記憶體中不管有多少個引用,相同的對象隻占用一塊記憶體;當改變變量值時,必須建立新的對象。
可變資料類型:
對一個變量進行操作時,其值可變;且值的變化并不會引起建立對象的操作,即位址是不會變的,僅内容變化或位址擴充。
通過id()函數獲得變量的位址,驗證資料類型是否可變
4.5.2 格式化輸出
“%”進行格式化輸出
使用format()函數進行格式化輸出
基本用法:
(1)不帶編号,即“{}”;
(2)帶數字編号,可調換順序,即“{1}”、“{2}”;
(3)帶關鍵字,即“{a}”、“{tom}”。
特殊用法:
(1)< (預設)左對齊、> 右對齊、^ 中間對齊、= (隻用于數字)在小數點後進行補齊;
(2)取位數“{:4s}”、"{:.2f}"等。
4.6 總結
- 介紹四種複合資料類型的定義及使用流程
- 介紹類型轉換和格式化輸出的方法
-
介紹複合資料類型在實際項目中的使用技巧
與差別
4.7 每日一分享
天不生無用之人,地不長無用之草。
黃河尚有澄清日,豈可人無得運時。
雪壓寒梅頭不低,卧薪嘗膽待佳期。
終有一日同風起,扶搖直上九萬裡。