迭代(iterable)和迭代器

2021-09-12 20:25:03 字數 1853 閱讀 1751

#任何可迭代物件都可以作用於for迴圈,包括我們自定義的資料型別,只要符合迭代條件,就可以使用for迴圈

d =

#對dict迭代

for k,v in d.items():

# 如果要同時迭代key和value,可以用for k, v in d.items()

print

(k,v)

#預設情況下,dict迭代的是key # 如果要迭代value,可以用for value in d.values()

#字串也是可迭代物件,因此,也可以作用於for迴圈

#如何判斷乙個物件是可迭代物件呢?方法是通過collections模組的iterable型別判斷

from collections import iterable #匯入collections模組的iterable型別

n=isinstance

(d,iterable)

print

(n)#結果為true,可迭代

#python內建的enumerate函式可以把乙個list變成索引-元素對,這樣就可以在for迴圈中同時迭代索引和元素本身

names=

['a'

,'b'

,'c'

,'d'

]for i,value in

enumerate

(names)

:#for迴圈同時引用兩個變數

print

(i,value)

for x,y in[(

1,2)

,(3,

5),(

5,6)

]:##for迴圈同時引用兩個變數

print

(x,y)

迭代器

可以直接作用於for迴圈的資料型別有以下幾種:

一類是集合資料型別,如list、tuple、dict、set、str等;

一類是generator,包括生成器和帶yield的generator function。

這些可以直接作用於for迴圈的物件統稱為可迭代物件:iterable

#可以使用isinstance()判斷乙個物件是否是iterable物件

from collections import iterable

m=isinstance([

],iterable)

#true

#而生成器不但可以作用於for迴圈,還可以被next()函式不斷呼叫並返回下乙個值,

#直到最後丟擲stopiteration錯誤表示無法繼續返回下乙個值了。

#可以被next()函式呼叫並不斷返回下乙個值的物件稱為迭代器:iterator

#生成器都是iterator物件,但list、dict、str雖然是iterable,卻不是iterator。

#把list、dict、str等iterable變成iterator可以使用iter()函式

from collections import iterator

m=isinstance

(iter

('abc'

),iterator)

#true

凡是可作用於for迴圈的物件都是iterable型別;

凡是可作用於next()函式的物件都是iterator型別,它們表示乙個惰性計算的序列;

集合資料型別如list、dict、str等是iterable但不是iterator,不過可以通過iter()函式獲得乙個iterator物件。

python的for迴圈本質上就是通過不斷呼叫next()函式實現的

迭代(iterable)和迭代器

簡介 迭代 iterable 任何可迭代物件都可以作用於for迴圈,包括我們自定義的資料型別,只要符合迭代條件,就可以使用for迴圈 d 對dict迭代 for k,v in d.任何可迭代物件都可以作用於for迴圈,包括我們自定義的資料型別,只要符合迭代條件,就可以使用for迴圈 d 對dict迭...

Python迭代器Iterable判斷方法解析

迭代器 程式設計客棧iterable 能直接作用於for迴圈的物件,統稱可迭代物件。例如 list tuple set str generator都是可迭代物件。1 如何判斷乙個物件是否可迭代 如何判斷乙個物件是可迭代物件 匯入collections.abc模組程式設計客棧中的iterable物件 ...

迭代器和反向迭代器,常量迭代器和非常量迭代器

迭代器的型別共有4種 iiterator,const iterator,reverse iterator,const reverse iterator include include include include using namespace std int main include inclu...