Python學習之迭代

2021-08-20 06:52:38 字數 2440 閱讀 2502

1.什麼是迭代(iteration)和可迭代?

迭代:在python中給定乙個可迭代物件(如:列表,元組),通過for迴圈對其進行遍歷,這種遍歷操作即為迭代。

可迭代:可迭代是任何你可以用python中的for迴圈遍歷的東西。可迭代意味著可遍歷,任何可以遍歷的東西都是可迭代的。

2.常見的可迭代物件

序列是一種常見的可迭代型別,序列有一些特定的特徵集,它們可以從0開始索引,以小於序列的長度結束,有一定的長度並且可以被切分。列表,元組,字串等屬於序列,都是可以迭代的。

但是不是所有可迭代的物件都是序列,如:集合,字典,檔案,生成器等都是可迭代的,但它們不是序列。

如何判斷哪些是可迭代的物件呢?可以通過匯入collections模組的iterable包中的isinstance()函式來判定。

>>> from collections import iterable  #模組載入

>>> a = 'abc'

>>> isinstance(a,iterable) #判斷字串是否可迭代

true

>>> b = [1,2,3]

>>> isinstance(b,iterable) #判斷列表物件是否可迭代

true

>>> a = (1,2,3)

>>> isinstance(a,iterable) #判斷元組物件是否可迭代

true

>>>

3.python中的for迴圈

不同於像c/c++之類語言的for迴圈,python的for迴圈沒有索引,而是依靠迭代器來進行迴圈。

c++的for迴圈:

int num[5] = 

for(int i=0; i<5; i++)

i = 0

while i < len(names):

print(names[i])

i += 1

traceback (most recent call last):

file "test.py", line 4, in print(names[i])

typeerror: 'set' object does not support indexing

所以,我們不能使用索引手動對python中的每乙個迭代物件進行遍歷,對於不是序列的迭代器來說,這是行不通的。

4.python的for迴圈是迭代器驅動的

在python中可以用內建的iter()函式來訪問迭代器。

現在由三個可迭代物件,乙個元組,乙個集合,乙個字串

>>> num = 

>>> nums = (1,2,3,4)

>>> string = 'hi jack'

用iter()函式訪問,給iter()函式傳遞乙個迭代器將返回乙個迭代器給使用者,不論迭代器是什麼型別。

>>> iter(num)

>>> iter(nums)

>>> iter(string)

>>>

有了迭代器,就可以把迭代器傳遞給內建函式next()來獲取它的下一項:

>>> num = [1,2,3]

>>> num_iterator = iter(num)

>>> next(num_iterator)

1>>> next(num_iterator)

2>>> next(num_iterator)

3

迭代器有其狀態,一旦從中使用了一項即取出了一項,取出過的迭代器就消失了,當從迭代器中請求next()項時,如果其中沒有了更多的項即請求超過了應有數量的項,會出現異常stopiteration:

>>> num = [1,2,3]

>>> num_iterator = iter(num)

>>> next(num_iterator)

1>>> next(num_iterator)

2>>> next(num_iterator)

3>>> next(num_iterator)

traceback (most recent call last):

file "", line 1, in stopiteration

>>>

所以,我們可以從每次迭代中獲得乙個迭代器,迭代器唯一能做的就是用next()函式請求它們的下一項,如果沒有了下一項,但你依然將它們傳遞給next(),那麼就會引發stopiteration異常。

參考文章:

python學習之迭代器

在介紹迭代器時候,首選介紹兩個概念,from collections.abc import iterable from collections.abc import iterator print isinstance iterable print isinstance iterable print ...

python學習之迭代器

4.5.1 可迭代物件 字面意思分析 可以重複的迭代的實實在在的東西。list,dict keys values items tuple,str,set,range,檔案控制代碼 待定 專業角度 內部含有 iter 方法的物件,就是可迭代物件。內建函式 dir print dir str 判斷乙個物...

六 Python之迭代

通過for迴圈來遍歷python的集合,我們稱之為迭代,毫無疑問python的迭代具有更高的抽象度,迭代與按下標訪問陣列最大的不同是,後者是一種具體的迭代實現方式,而前者只關心迭代結果,根本不關心迭代內部是如何實現的。有的時候,我們確實想在 for 迴圈中拿到索引,怎麼辦?方法是使用 enumera...