一、切片
l[0:3:1]
表示,從索引0
開始取,直到索引3
為止,但不包括索引3,其中步長為1
。即索引0
,1
,2
,正好是3個元素
倒數第乙個元素的索引是-1
如果第乙個索引是0
,還可以省略
二、迭代
給定乙個list或tuple,我們可以通過for
迴圈來遍歷這個list或tuple,這種遍歷我們稱為迭代(iteration)
預設情況下,dict迭代的是key。如果要迭代value,可以用for value in d.values()
,如果要同時迭代key和value,可以用for k, v in d.items()
可迭代物件:
1)集合資料型別,如list
、tuple
、dict
、set
、str
等
2)generator
,包括生成器和帶yield
的generator function
判斷是否可以迭代:isinstance('abc', iterable) # str是否可迭代
三、生成器
生成器:generator:列表元素可以按照某種演算法推算出來,在迴圈的過程中不斷推算出後續的元素,這種一邊迴圈一邊計算的機制,稱為生成器
建立了乙個generator後,基本上永遠不會呼叫next()
,而是通過for
迴圈來迭代它,並且不需要關心stopiteration
的錯誤
如果乙個函式定義中包含yield
關鍵字,那麼這個函式就不再是乙個普通函式,而是乙個generator
注意:generator和函式的執行流程不一樣。函式是順序執行,遇到return
語句或者最後一行函式語句就返回。而變成generator的函式,在每次呼叫next()
的時候執行,遇到yield
語句返回,再次執行時從上次返回的yield
語句處繼續執行
用for
迴圈呼叫generator時,發現拿不到generator的return
語句的返回值。如果想要拿到返回值,必須捕獲stopiteration
錯誤,返回值包含在stopiteration
的value
中
四、迭代器
可以使用isinstance()
判斷乙個物件是否是iterator
物件
生成器都是iterator
物件,但list
、dict
、str
雖然是iterable
,卻不是iterator
把list
、dict
、str
等iterable
變成iterator
可以使用iter()
函式
五、小結
凡是可作用於for
迴圈的物件都是iterable
型別(可迭代)
凡是可作用於next()
函式的物件都是iterator
型別,它們表示乙個惰性計算的序列
集合資料型別如list
、dict
、str
等是iterable
但不是iterator
,不過可以通過iter()
函式獲得乙個iterator
物件
注意:python的iterator
物件表示的是乙個資料流,iterator物件可以被next()
函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration
錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()
函式實現按需計算下乙個資料,所以iterator
的計算是惰性的,只有在需要返回下乙個資料時它才會計算
Python高階特性
l csx sarah tracy bob jack print l 0 l 1 l 2 輸出 csx sarah tracy l 0 3 輸出 csx sarah tracy 如果第乙個索引是0,還可以省略 print l 2 輸出 bob jack print l 2 1 輸出 bob d fo...
Python高階特性
python 高階特性 from collections import iterable from collections import iterator 切片 list切片 l list range 100 print l 0 3 取前3個元素 print l 3 取前3個元素 print l 4...
Python高階特性
切片 slice 非常靈活,體現了python的簡便性 1.取乙個list和tuple的部分元素時的簡化操作 l michael sarah tracy bob jack l 0 3 michael sarah tracy 從0開始不包括3,第乙個索引是0可省略,也支援負數按倒數的順序取值,什麼都不...