Python3中有三種組合數據類型,分別為:
- 序列類型:字符串(str)、元組(tuple)、列表(list)
- 集合類型:集合(set)
- 映射類型:字典(map)
序列類型
Python序列類似于其他語言中的數組。支持雙向索引。第一個元素為0,最后一個元素為-1
列表
內置可變序列,所有元素放在一對中括號中,并用逗號分隔。當列表元素增加或者刪除時,列表對象自動進行擴展或者收縮內存,保證元素之間沒有縫隙。一個列表中的元素可以各不相同。
創建和刪除
使用=
直接將一個列表賦值給變量即可創建列表對象。也可以使用list()
函數將元組、range對象、字符串和其他類型的可迭代對象轉化為列表
當列表不再使用時可以用del
命令刪除整個列表。如果列表對象所指向的值不再有其他對象指向,Python將同時刪除該值。
元素的增加
- 使用
+
運算符將元素添加到列表中(嚴格意義上來講,這并不是真的為列表添加元素,而是創建一個新列表并將原列表中的元素和新元素依次復制到新列表的內存空間,因此效率較慢) - 使用
append()
方法,原地修改列表,效率較高 - 直接修改序列變量將會改變所指向的內存地址,而不是改變其所指向內存中的值。
- 原地操作(通過下標修改、通過序列本身提供的方法)將不會改變所指向的內存地址
extend()
方法可以將另一個迭代對象的所有元素添加至該列表對象尾部。屬于原地操作insert()
方法可以將元素添加至列表的指定位置。需要移動后面所有的元素,效率較低。- 使用乘法擴展列表對象
當被擴展列表中的元素是引用的時候,擴展后的列表中的元素是相等的引用,如果對其中某一個引用所指向的地址空間進行修改,指向同一片區域的引用對應的值也會修改,根本原因在于乘法操作所進行的是淺復制,后面有對淺復制的介紹
元素的刪除
- 使用
del
命令刪除列表中指定位置上的元素 ,原地操作 - 使用列表的
.pop()
方法刪除并返回元素,默認刪除最后一個位置的元素 remove()
方法刪除首次出現的指定元素,如果不存在拋出異常
解決方法,可以使用x[:]
深復制,詳見我之前的博客:Python a和a[:]的區別
或者使用del
從后往前進行刪除
元素的訪問和計數
- 使用下標訪問,如果超出范圍則拋出異常
- 使用
index()
方法獲取指定元素首次出現的下標。若不存在指定元素拋出異常 - 使用
count()
方法統計指定元素在列表對象中出現的次數
切片操作
適用于列表、元組、字符串、range對象
語法:list[begin:end:step]
返回一個新列表
切片操作不會因為下標越界而拋出異常,而是簡單地在列表尾部截斷或者返回一個空列表
通過切片操作可以修改和刪除列表中的部分元素,甚至可以通過切片操作為列表對象增加元素
切片操作是原位操作,不會修改所指向的地址空間
切片操作是一種淺復制
淺復制:把子列表的引用復制到新列表中,這樣的話修改任何一個都會影響另外一個
當我們對某個元素進行修改的時候其實修改的是他的引用,如果我們修改的是引用所指向的空間,那么所有指向該空間的值都會發生改變
排序
這里的reversed對象好像只能訪問一次
常用方法
常用內置函數
len(列表)
返回列表中元素的個數max() min()
返回最大元素或者最小元素sum()
對列表元素進行求和,同樣適用于元組、range
zip()
返回可迭代的zip對象
enumerate()
枚舉列表元素,返回枚舉對象,其中每個元素為包含下標和值的元組。該函數對元組、字符串同樣有效
列表推導式
在列表推導式中使用多個循環實現多序列元素的任意組合,并且可以結合條件語句過濾特定元素
元組
元組和列表類似,但屬于不可變序列
和列表的區別:
- 元組中的數據一旦定義就不允許更改,也沒有對應的修改的方法
- 從效果上看,
tuple()
凍結列表,而list()
融化元組
優點: - 速度比列表快
- 不需要擔心被修改,更安全
- 元組可以當作字典鍵(特別是包含字符串、樹枝和其他元組這樣不可變數據的元組)。列表永遠不能當作字典鍵使用,因為列表是可變的。
創建與刪除
- 使用
=
將一個元組賦值給變量,需要注意的是一個元素的時候必須在元素后面加上逗號,否則將會當作里面的元素 - 使用
tuple()
函數將其他序列轉換為元組 - 使用
del
刪除元組對象,不過不能刪除元組中的元素
序列解包
集合
集合是無序可變序列,使用一對大括號界定,元素不可重復,用一個集合中每個元素都是唯一的。
集合中只能包含數字、字符串、運足等不可變類型(可哈希類型)的數據,而不能包含列表、字典、集合等可變類型的數據
創建和刪除
- 等號賦值
set()
函數進行轉換,而且會自動去重- 使用
del
刪除整個集合 - 使用
pop()
彈出并刪除其中一個元素,remove()
方法直接刪除指定元素,clear()
方法清空集合
集合操作
字典
字典是無需可變序列,是實現鍵值對映射的數據結構
字典是一個鍵值對的集合,該集合以鍵為索引,一個鍵對應一個值信息。字典中的鍵可以為任意不可變元素,如整數、實數、復數、字符串、元組等。
定義字典時,每個元素的鍵和值用冒號分隔,元素之間用逗號分隔,所有的元素放在一對大括號中
globals()返回包含當前作用域內所有全局變量和值的字典
locals()返回包含當前作用域內所有局部變量和值的字典
創建和刪除
- 等號賦值
- 使用
dict()
利用已有數據創建字典
元素的讀取
- 以鍵作為下標可以讀取字典元素,若鍵不存在則拋出異常
- 用
get()
方法獲取指定鍵對應的值,并且在鍵不存在的時候返回指定值
- 使用
items()
方法可以返回字典的鍵、值對列表 - 使用
key()
方法返回鍵列表 - 使用
values()
方法返回字典的值列表
元素的添加和修改
- 以指定鍵為下標為字典賦值時,若鍵存在則修改該鍵的值,若不存在則添加一個鍵值對
- 使用
update()
方法將另一個字典的鍵值對添加到當前字典對象
- 使用
del
刪除字典中指定鍵的元素 - 使用
pop()
方法刪除并返回指定鍵的元素 - 使用
clear()
方法刪除字典中的所有元素 - 使用
popitem()
方法刪除并返回字典中第一個元素