首先我們要了解的我們常用的python是由c語言實現的即cpython, python< 3.6。
python提供了許多內建的資料型別,如果選擇明智的話,可以高效解決許多問題。
你可能已經學過下面這些集合型別,因為在開發過程中很常用:
• 列表(list)
• 元組(tuple)
• 字典(dictionary)
• 集合(set)
python的容器型別當然不止這4種,它的標準庫擴充套件了其可選列表。在許多情況下,問題的答案可能正如選擇正確的資料結構一樣簡單。
python最基本的兩個集合型別就是列表與元組,它們都表示物件序列。
二者之間的根本區別:列表是動態的,其大小可以改變;而元組是不可變的,一旦建立就不能修改。
在python中,列表被實現為長度可變的陣列。強調這一點是因為在日常開發中使用頻率很高,所以對應用的效能影響很大。
從細節上來看,python中的列表是由對其他物件的引用組成的連續陣列。指向這個陣列的引用及其長度被儲存在乙個列表頭結構中。這就意味這每次新增、刪除列表元素都需要改變陣列的大小(重新分配空間),幸運的是,python在建立這些陣列時採用了指數過分配(exponential over-allocation),所以並不是每次操作都需要改變陣列大小。
使用迴圈建立乙個列表
evens =
for i in
range(10
):if i %2==
0:evens [0
,2,4
,6,8
]
[i for i in
range(10
)if i %2==
0][0
,2,4
,6,8
]
當資料量足夠大時,可以發現列表推導的執行速度是更快的
列表推導的基礎使用方式
if判斷巢狀
[i for i in
range(10
)if i %2==
0][0
,2,4
,6,8
]
if…else…判斷巢狀[i if i %2==
0else-1
for i in
range(10
)][0
,-1,
2,-1
,4,-
1,6,
-1,8
,-1]
函式巢狀def
func
(i):
ret = i+
10if ret %4:
return
3else
:return
4[func(i)
for i in
range(10
)][3
,3,4
,3,3
,3,4
,3,3
,3]
字典可以儲存具有唯一鍵對映關係的鍵值對,且具有無序性。
python使用雜湊表實現的字典底層的資料結構,這也就是為什麼只有可雜湊的物件才能做字典的鍵。python中不可變的內建型別(數字、字串、元組)都是可雜湊的,可變型別(列表、字典、集合)是不可雜湊的。
字典推導與類表推導實現的方式一致,且具有相同的優點。
字典具有3個基本操作,新增元素、獲取元素和刪除元素。在日常使用中需要注意,在需要頻繁的字典元素做新增、刪除操作時,最好是建立乙個新的字典,而不時始終在舊的字典上資訊操作。
當我們建立乙個字典後,對字典進行新增元素再進行大量的元素刪除,當遍歷字典時,會遍歷字典曾經達到過的最大元素數目,也就是說被刪除的元素的雜湊位址並不會同時被釋放。
字典的遍歷時會有新增和最終遍歷的順序是不一致的,這也是由底層的資料結構所造成的,鍵是雜湊後排序儲存在乙個連續的儲存空間上的,所以遍歷的結果通常不是我們預期的。
所以需要使用有序字典,解決我們問題,python標準庫的collections模組提供了ordereddict的有序字典。
from collections import ordereddict
od = ordereddict([(
'a',1)
,('b',2)
,('c',3)
])# 建立字典
print
(od)
od = ordereddict(
)# 建立空字典
od['a']=1
# 更新或新增元素
od['b']=2
od['c']=3
od.update(
)# 更新或新增元素
print
(od)
od.pop(
'a')
# 刪除元素
print
(od)
ordereddict([(
'a',1)
,('b',2)
,('c',3)
])ordereddict([(
'a',1)
,('b',2)
,('c',3)
,('d',4)
])ordereddict([(
'b',2)
,('c',3)
,('d',4)
])
x =
y =# 返回兩個集合的差集
print
(x.difference(y)
)print
(y.difference(x)
)# 返回兩個集合中不重複的元素集合。
print
(x.symmetric_difference(y)
)# 返回兩個集合的交集
print
(x.intersection(y)
)# 返回兩個集合的並集
print
(x.union(y)
)
python 高階程式設計學習筆記
2.enumerate 用法 i 0 for el in a b c print i,el i 1 上面這個遠不如下面的方法 for i,el in enumerate a b c print i,el 3.合併兩個列表,最終生成乙個字典 4.序列解包 a,b,rest 1,2,3,4,5 prin...
python學習筆記1 理解Python語言
本章主要介紹一下python語言的相關知識,包括其語言型別 作為物件導向的3大特性以及5大原則,在末尾介紹了其優缺點。與c c 等編譯型語言相比,python語言的程式並不是首先編譯成二進位制機器碼後執行,而是由python解析器解釋一句並在python虛擬機器中執行一句,直到程式結束或者丟擲錯誤。...
Python學習筆記(一)Python基本語法元素
二 程式設計例項 4 語句與函式 三 推薦課程 pprocess處理,程式的主要邏輯。ooutput輸出,程式的輸出 tempconvert.py tempstr input 請輸入帶有符號的溫度值 if tempstr 1 in f f c eval tempstr 0 1 32 1.8print...