Python 迭代物件與迭代器

2021-10-08 06:53:35 字數 3991 閱讀 3395

可迭代物件(iterable):可以直接作用於for迴圈的物件統稱為可迭代物件。可以用isinstance()去判斷乙個物件是否是可迭代物件(iterable)。

可以直接作用於for的資料型別一般分兩種:

1、集合資料型別,如list、tuple、dict、set、string

2、generator,包括生成器和帶yield的generator function

在講解迭代器之前,我們先來了解一下isinstance()。

語法:isinstance(object, classinfo)

引數:object – 例項物件。

classinfo – 可以是直接或間接類名、基本型別或者由它們組成的元組。

對於基本型別來說 classinfo 可以是:int,float,bool,complex,str(字串),list,dict(字典),set,tuple。

classinfo 的字串是 str 而不是 string,字典也是簡寫 dict。

返回值

如果物件的型別與引數二的型別(classinfo)相同則返回 true,否則返回 false。。

from collections.abc import iterable

print

(isinstance([

],iterable)

)#返回true 因為list是可迭代物件

print

(isinstance((

),iterable)

)#返回true 因為tuple是可迭代物件

print

(isinstance

(,iterable)

)#返回true 因為dict是可迭代物件

print

(isinstance(""

,iterable)

)#返回true 因為string是可迭代物件

print

(isinstance

((x for x in

range(10

)),iterable)

)#返回true 是可迭代物件

print

(isinstance(1

,iterable)

)#返回false

我們簡要理解(x for x in range(10))

前面的那乙個x是該迭代器生成的列表中每乙個元素要代入的表示式,後面的for x in range(10)得出x的取值範圍代入前面的x,得到生成的乙個列表。

迭代器(iterator物件)不但可以作用於for迴圈,還可以被next()函式不斷呼叫並返回下乙個值,直到最後丟擲乙個stopiteration錯誤,表示無法繼續返回下乙個值

如何判斷是否是乙個iterator物件(迭代器)?

可以用isinstance()函式判斷乙個物件是否是iterator物件

from collections.abc import iterator

print

(isinstance([

],iterator)

)#返回false

print

(isinstance((

),iterator)

)#返回false

print

(isinstance

(,iterator)

)#返回false

print

(isinstance(""

,iterator)

)#返回false

print

(isinstance

((x for x in

range(10

)),iterable)

)#返回true

#可得只有(x for x in range(10)才是迭代器

我們來驗證一下x for x in range(10))以及與這個相似的,是否符合迭代器的定義。

第乙個:x for x in range(5)

l =

(x for x in

range(5

))print

(next

(l))

#0print

(next

(l))

#1print

(next

(l))

#2print

(next

(l))

#3print

(next

(l))

#4#print(next(l)) #報錯stopiteration

第二個:x for x in [23,4,5,64,3435]

l =

(x for x in[23

,4,5

,64,3435])

print

(next

(l))

#23print

(next

(l))

#4print

(next

(l))

#5print

(next

(l))

#64print

(next

(l))

#3435

#print(next(l)) #報錯stopiteration

他們符合迭代器的定義,所以都是迭代器。

返回值:迭代器物件

我們使用iter( )可以將list轉成iterator物件

例:

a =

iter([

1,2,

3,4,

5])print

(next

(a))

#1print

(next

(a))

#2print

(next

(a))

#3print

(next

(a))

#4print

(next

(a))

#5a =

iter([

1,2,

3,4,

5])for i in a:

print

(i)'''12

345'''

元組,字典,字串也可以,我們直接用isinstance( )函式來判斷列表、元組,字典,字串通過iter( )是否變成了iterator物件。

from collections.abc import iterator

print

(isinstance

(iter([

]),iterator)

)#返回true

print

(isinstance

(iter((

)),iterator)

)#返回true

print

(isinstance

(iter()

,iterator)

)#返回true

print

(isinstance

(iter(""

),iterator)

)#返回true

和上面的對比通過使用iter()將列表,元組,字典,字串轉化成了iterator物件。

python迭代 可迭代物件與迭代器物件

問題舉例 某軟體要求,從網路抓取各個城市的氣溫資訊,並依次顯示 北京 15 22 上海 18 23 如果一次抓取所有城市氣溫資訊再顯示,顯示第乙個城市的氣溫時會由很長的延時,並且浪費儲存空間,我們期望以 用時訪問 的策略,並且把所有城市的氣溫資訊封裝 到乙個物件裡,可用for語句進行迭代。來個栗子 ...

python 迭代器與可迭代物件

主要有兩個方法next 與iter next不斷返回下乙個元素,知道元素全部返回後出現異常,可以節省記憶體空間。iter是迭代,可以把乙個列表直接轉換成迭代器,然後使用next 方法。data list 1,2,3,4,5 data list iter data list print next da...

Python 迭代器與可迭代物件

迭代器可以讓我們訪問集合的時候變得非常方便。之前我們通過for.in.的方式訪問乙個集合的時候,就是使用迭代器完成的。如果沒有迭代器,那麼我們只能通過while迴圈,每次迴圈的時候通過下標訪問了。可以直接使用for迴圈遍歷的物件,成為可迭代的物件,常見的可迭代的物件有 list tuple dict...