在之前我們學會了數字類型,包括整數類型、浮點類型和復數類型,這些類型僅能表示一個數據,這種表示單一數據的類型稱為基本數據類型。然而,實際計算中卻存在大量同時處理多個數據的情況,這種需要將多個數據有效組織起來並統一表示,這種能夠表示多個數據的類型稱為組合數據類型。
一、組合數據類型概述
組合數據類型更能夠將多個同類或不同類型組織起來,通過單一的表示使數據更有序、更容易。根據數據之間的關系,組合數據類型可以分為3類:序列類型、集合類型和映射類型。
序列類型是一個元素向量,元素之間的存在先后關系,通過序號訪問,元素之間不排他。
集合類型是一個元素類型,元素之間無序,相同元素在集合中唯一存在。
映射類型是“鍵-值”數據項的組合,每個元素是一個鍵值對,表示為(key, value)。
1.序列類型
序列類型是一堆元素向量,元素之間存在先后關系,通過序號訪問。
Python中有很多數據類型都是序列類型,其中比較重要的是str(字符串)、tuple(元組)list(列表)可以看成是單一字符的有序序列,屬於序列類型。
序列類型有12個通用的操作符和函數
操 作 符 | 描 述 |
x in s | 如果x是是的元素,返回True,否者返回False |
x not in s | 如果x不是s的元素,返回True,否則返回False |
s + t | 連接S和t |
s * n 或 n * s | 將序列s復制n次 |
s[i] | 索引,返回序列的第i個元素 |
s[i:j] | 分片,返回包含序列s第i到j個元素的子序列(不包含第j個元素) |
s[i:j:k] | 步驟分片,返回包含序列s第i到j個元素以k為步數的子序列 |
len(s) | 序列s的元素個數(長度) |
min(s) | 序列s中的最小元素 |
max(s) | 序列s中的最大元素 |
s.index(x(,i[,j])) | 序列s中從i開始到j位置中第一次出現的元素x的位置 |
s.count(x) | 序列中出現x的總次數 |
元組(tuple)是序列類型中比較特殊的類型,因為它一旦創建就不能被修改。Python中元組采用逗號和圓括號(可選)來表示,如:
>>>creature = "cat", "dog", "tiger", "bear" print(creature) >>>('cat', 'dog', 'tiger', 'bear')
>>>creature = "cat", "dog", "tiger", "bear"
all=(1,2,456,creature) #元組中包含元組creature
print(all)
print(all[2])
print(all[-1][2])
>>>(1, 2, 456, ('cat', 'dog', 'tiger', 'bear'))
>>>456
>>>tiger
其中,一個元組可以作為另一個元組的元素,可以采用多級索引獲取信息,例如上面的元組all中包含了元組creature,可以用all[-1][2]獲取對應元素值。
元組除了用於表達固定數據外,還常用於以下3種情況:函數多返回值、多變量同步賦值、循環遍歷,例如:
>>>def func(x): #函數多返回值 return x,x*x;
>>>a,b = 'dog','cat' #多變量同步賦值
>>>import math #循環遍歷
for x,y in ((1,0),(2,5),(3,8)):
print(math.hypot(x,y)) #求多個坐標值到原點的距離
2.集合類型
集合類型與數學中集合的概念一致,即包含0個或多個數據項的無序組合。
集合中的元素不可重復,元素類型只能是固定數據類型,例如集合、浮點數、字符串、元組等,列表、字典、和集合類型本身都是可變數據類型,不能作為集合的元素出現。
由於集合是無序組合,它沒有索引和位置的概念,不能分片,集合中元素可以動態增加和刪除。集合用大括號({})表示,可以用賦值語句生成一個集合,例如:
>>>S={100,200,(666,25),"YES",458} print(S) >>>{100, 200, 458, 'YES', (666, 25)}
從上面可以看出,由於集合的元素是無序的,集合的打印效果與定義順序可以不一致。
集合類型有10個操作符
操 作 符 | 描 述 |
S-T 或 S.difference(T) | 返回一個新集合,包括在集合S中但不在集合T中的元素 |
S-=T 或 S.difference_update(T) | 更新集合S,包括在集合S中但不在集合T中的元素 |
S & T 或 S.intersection(T) | 返回一個新集合,包括同時在集合S和T中的元素 |
S&=T 或 S.intersection_update(T) | 更新集合S,包括同時在集合S和T中的元素 |
s=^T 或 S.symmetric-difference(T) | 返回一個新集合,包括集合S和T中的元素,但不包括同時在其中的元素 |
s=^T 或 S.symmetric-difference_update(T) | 更新集合S,包括集合S和T中的元素,但不包括同時在其中的元素 |
S|T 或 S.union(T) | 返回一個新集合,包括集合S和T中的所有元素 |
S=|T 或 S.update(T) | 更新集合S,包括集合S和T中的所有元素 |
S<=T 或 S.update(T) | 如果S和T相同或S是T的子集,返回True,否則返回False,可以用S>T判斷S是否是T的真子集 |
S>=T 或 S.issuperset(T) | 如果S和T相同或S是T的超集,返回True,否則返回False,可以用S>T判斷S是否是T的真超集 |
集合類型與其他類型最大的不同在於它不包含重復元素,因此,當需要對一維數據進行去重或進行數據重復處理時,一般通過集合來完成。
3.映射類型
映射類型是“鍵-值”數據項的組合,每個元素是一個鍵值對,即元素是(key,value),元素之間是無序的。
鍵(key)表示一個屬性,也可以理解為一個類別或項目,值(value)是屬性的內容,鍵值對刻畫了一個屬性和它的值。鍵值對將映射關系結構化,用於存儲和表達。
在Python中,映射類型主要以字典(dict)體現。
二、列表類型和操作
列表是包含0個或多個對象引用的有序序列,沒有長度限制,可自由增刪元素,使用靈活。
1.列表類型的概念
列表(list)是包含0個或多個對象引用的有序序列,屬於序列類型。與元組不同,列表的長度和內容都是可變的,可自由對列表中的數據項進行增加、刪除或替換
2.列表類型的操作
函數或方法 | 描述 |
ls[i] = x | 替換類表 ls 第 i 數據項為 x |
ls[i:j] =l t | 用列表 lt 替換列表 ls 中第 i 到第 j 項數據(不含第 j 項) |
ls[i:j:k] = lt | 用列表 lt 替換列表 ls 中第 i 到第j項以k為步數的數據(不含第j項) |
del ls[i:j] | 刪除列表 ls 第i到第 j 項數據,等價於ls[i:j]=[] |
del ls[i:j:k] | 刪除列表 ls 第 i 到第 j 項以 k 為步數的數據 |
ls += lt 或 ls.extend(lt) | 將列表 lt 元素增加到列表 ls 中 |
ls *= n | 更新列表 ls,其元素重復 n 次 |
ls.append(x) | 在列表 s 最后增加一個元素 x |
ls.clear() | 刪除 ls 中的所有元素 |
ls.copy() | 生成一個新列表,復制 ls 中的所有元素 |
ls.insert(i,x) | 在列表 ls 的第 i 位置增加元素 x |
ls.pop(i) | 將列表 ls 中的第 i 項元素取出並刪除該元素 |
ls.remove(x) | 將列表中出現的第一個元素 x 刪除 |
ls.reserve(x) | 列表 ls 中的元素反轉 |
三、字典類型和操作
列表是存儲和檢索數據的有序序列。當訪問列表中的元素時,可以通過整數的索引來查找它,這個索引時元素在列表中的符號,列表的索引模式是“<整數序號>查找<被索引內容>”
1.字典類型的概念
通過任意鍵信息查找一組數據中值信息的過程叫做映射,Python語言中通過字典實現映射。Python語言中的字典可以通過大括號({})建立,建立模式如下:
{<鍵1>:<值1>, <鍵2>:<值2>, ... ,<鍵n>:<值n>}
其中,鍵和值通過冒號連接,不同鍵值對通過逗號隔開。
例如:
>>>Dic={"中國":"北京","美國":"華盛頓","法國":"巴黎"} print(Dic) print(Dic["中國"]) >>>{'中國': '北京', '美國': '華盛頓', '法國': '巴黎'} >>>中國
一般來說,字典中鍵值對的訪問模式如下,采用中括號格式:
<值> = <字典變量> [<鍵>]
2.字典類型的操作
與列表類似Python字典也有非常靈活的操作方法。使用大括號可以創建字典,並指定初始值,通過中括號可以增加新的元素,例如:
>>>Dic={"中國":"北京","美國":"華盛頓","法國":"巴黎"} Dic{"英國"}="倫敦" print(Dic) >>>{"中國":"北京","美國":"華盛頓","法國":"巴黎","英國":"倫敦"}
注意:直接使用大括號({})生成一個空的字典。生成空集合需要使用函數set()。
字典類型的函數和方法:
函數和方法 | 描 述 |
<d>.keys() | 返回所有的鍵信息 |
<d>.values() | 返回所有的值信息 |
<d>.items() | 返回所有的鍵值對 |
<d>.get(<key>,<default>) | 鍵存在則返回相應值,否則返回默認值 |
<d>.pop(<key>,<default>) | 鍵存在則返回返回值,同時刪除鍵值對,否則返回默認值 |
<d>.popitem() | 隨機從字典中取出一個鍵值對,以元組(key,value)形式返回 |
<d>.clear() | 刪除所有的鍵值對 |
del<d>[<key>] | 刪除字典中某一個鍵值對 |
<key>in<d> | 如果鍵在字典中返回True,否則返回False |
與其他組合類型一樣,字典可以通過for-in語句對其元素進行遍歷,例如:
>>>Dic={"中國":"北京","美國":"華盛頓","法國":"巴黎"} for i in Dic: print(i) >>>中國 美國 法國
所以,字典有以下一些基本原則:
(1)字典是一個鍵值對的集合,該集合以鍵為索引,一個鍵信息只對應一個值信息。
(2)字典中元素以鍵信息為索引訪問。
(3)字典長度是可變的,可以通過對鍵信息賦值實現增加或修改鍵值對。