在python中,成員有序排列的(此有序並非指排序),並且可以通過下標訪問到它的成員,稱為序列,包括:字串、列表、元組。本章將主要討論python中的容器物件,主要包含順序容器列表和元組、對映容器字典以及集合容器集合。字串將在下一章單獨學習。
順序容器基礎
長度為n的順序容器在通過下標訪問時有兩種方式:
對於順序容器所適用的操作符包括:
順序容器常見的內建函式包括:
運算函式
列表列表的形式是用方括號包起、逗號分隔元素。列表可以通過下標或者切片操作來訪問乙個或多個連續的元素,其中不僅可以包含python的標準型別物件,還可以包括自定義的類物件。與c/c++中陣列不同的是,python中列表可以包括不同型別的物件。
# 建立列表
alist=[1
,'abc'
,true
,4.3,[
1,2,
3]]# 訪問元素
print
(alist[0]
)#1print
(alist[0:
3])#[1,'abc',true]
# 更新元素
alist[0]
=100
false
)# 刪除元素
del alist[1]
alist.remove(
'abc'
)# 刪除列表
del alist
列表中的操作符:
列表中的內建函式:與序列容器內建函式不同,列表中還有:
list.count(obj):返回obj在列表**現的次數。
list.extend(seq):把序列seq的內容新增到列表中。
list.insert(index,obj):在索引量為index的位置插入obj。
list.pop(index=-1):刪除並返回指定位置的物件,預設為列表尾部。
list.index(obj):返回obj的位置,在使用前要確認物件是否在列表中,否則會報錯。
list列表的底層實現,個人理解比較類似於c++中的vector,有時間可以閱讀原始碼了解。cpython 元組
元組是和列表非常相近的另一種容器型別,元組與列表最直觀的區別就是,元組使用的是圓括號而列表是方括號。而在功能上,元組是不可變型別。
元組的建立與訪問都和列表相同。
元組中的元素不可改變,但可以通過運算子對整體的元組進行改變,例如+連線、*重複等。
元組沒有自己的內建函式,並且由於元組的不可變性,列表中的排序、替換、新增等函式都無法對元組實現。
不可變物件:數字、字串、元組。乙個資料型別是不可變的,意味著一旦乙個物件被定義了,那麼它的值就不能再更新,除非重新建立乙個新的物件。不可變並非是一件壞事,比如當資料傳給乙個不了解的api時,可以確保資料不會改變。
注意,在建立元組時發現,無法建立單元素的元組。這是因為圓括號被過載作為分組操作符,由圓括號包裹的單一元素首先被作為分組操作,而不是元組的分界符。那麼正確的方法應該是(『abc』,)來表示乙個單一元素的元組。
元組 vs 列表
元組和列表作為兩個相似的序列容器,經常會被問到「為什麼同時需要這兩個容器?」。首先不可變型別容器在維護一些敏感資料時,可以保證資料的一致性,在呼叫函式時不會被中途篡改。對於元組,則在需要管理動態資料集合時,可以不斷地向其中新增資料。實際上通過,list()和tuple()函式可以方便的在兩者之間進行轉換。
字典字典是python中惟一的對映型別。對映型別物件裡雜湊值(鍵)和指向的物件是一對多的關係。乙個字典物件是可變的,是乙個容器型別。與順序容器不同的是,對映型別中的資料是無序關聯的,無法通過下標訪問,需要通過鍵來對值進行訪問。
雜湊表:雜湊表是一種資料結構,簡單來說就是一種「」鍵——值對「(key——value)的儲存方式,例如「姓名:張三」,而雜湊的獨特之處在於,鍵是通過計算(雜湊函式/雜湊函式)得來,雜湊函式通常的形式包括除法求餘法、乘法雜湊法等等,例如除法求餘就是h(k)=k mod m,雜湊表幾乎在所有程式語言中都有重要的用處,需要理解清楚。
字典是通過花括號包裹,宣告的方法與列表等容器類似並且還有其他兩種方法:
# 建立字典(一)
d=# 建立字典(二)
d=dict((
['name'
,'zhangsan'],
['x',3
]))# 建立字典(三)通過內建函式fromkeys()建立乙個預設字典,字典的值都為none
d=.fromkeys(
('x'
,'y'))
#訪問字典的值
for key in d:
print
(d[key]
)print
(d['name'])
#刪除字典元素
del d[
'name'
]d.pop(
'name'
)#刪除字典
d.clear(
)del d
字典型別的操作符:
字典型別的內建函式:
字典型別內建方法:
字典中的值沒有任何限制,可以是任意python物件,但對於鍵是有限制的。
print列印字典時的小技巧:
在只需要列印字典值的情況下,可以通過格式化輸出%,例如
dic =
print
('%(a)s,%(b)s,%(c)s'
%(dic)
)# 1,2,3
集合是不同元素組成的集合,是一組無序排列的的可雜湊的值,即集合中的所有元素都可以作為字典的鍵。集合有兩種型別可變set和不可變集合fronzenset。集合現在已經成為python中的一種基本資料型別。集合在建立後會自動進行排序,有些類似c++中的set。
集合的建立:
集合型別的操作符:
集合型別的內建方法:
下一章將討論深拷貝與淺拷貝,字串容器以及與字串相關的正規表示式。第五章
Python 學習 3 數值物件及其使用
數字型別 在前一章講過,數字是不可更改的型別,也就是說變更數字會生成新的物件。python中支援多種數字型別 整型 長整型 布林型 雙精度浮點型 十進位制浮點型和複數。如何更新數字物件?如何刪除數字物件?整型python中可以表示整數的型別包括 布林型 整型 長整型 長整型所表示的數值大小遠超過c語...
docker學習 (4) 容器
docker的容器是基於映象的建立的,即在映象的基礎之上建立一層讀寫層,但是對於映象的沒有發生變化。docker容器是輕量級的,可以隨時建立和刪除。docker容器執行是當容器內的任務完成,容器也就終止執行。1 docker 容器的建立 docker create 映象名稱 可以直接建立乙個處於停止...
Python學習 「容器」
資料型別分為基本資料型別和組合資料型別,今天我們先來說一下組合資料型別。我們的組合資料型別分為列表 元組 集合 字典,我們接下來詳細的說一下這四個型別。舉例1 著名的nba球星有喬丹 科比 詹姆斯 庫里 杜蘭特,用列表表示 nba 喬丹 科比 詹姆斯 杜蘭特 庫里 舉例2 王者榮耀裡的 分別是6,2...