迭代是python最強大的功能之一,是訪問集合元素的一種方式。
迭代器是乙個可以記住遍歷的位置的物件。
迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
迭代器有兩個基本的方法:iter() 和 next()。
字串,列表或元組物件都可用於建立迭代器:
>>>
list=[
1,2,
3,4]
>>>
it=
iter
(list
)# 建立迭代器物件
>>>
(next(it
))# 輸出迭代器的下乙個元素
1>>>
(next(it
))2>>>
迭代器物件可以使用常規for語句進行遍歷:
#!/usr/bin/python3
list=[
1,2,
3,4]
it=
iter
(list
)# 建立迭代器物件
forx
init
:print(x
, end="
")執行以上程式,輸出結果如下:
123也可以使用 next() 函式:4
#!/usr/bin/python3
import
sys# 引入 sys 模組
list=[
1,2,
3,4]
it=
iter
(list
)# 建立迭代器物件
while
true
:try
(next(it
))except
stopiteration
:sys
.exit()
執行以上程式,輸出結果如下:
1234
在 python 中,使用了 yield 的函式被稱為生成器(generator)。
跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是乙個迭代器。
在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續執行。
呼叫乙個生成器函式,返回的是乙個迭代器物件。
以下例項使用 yield 實現斐波那契數列:
#!/usr/bin/python3
import
sysdef
fibonacci(n
): # 生成器函式 - 斐波那契a,
b, counter= 0
, 1, 0
while
true:if
(counter
> n)
: return
yieldaa
, b= b
, a+ b
counter
+= 1f=
fibonacci(10
)# f 是乙個迭代器,由生成器返回生成
while
true
:try
(next(f
), end=""
)except
stopiteration
:sys
.exit()
執行以上程式,輸出結果如下:
0112358
1321
3455
迭代器與生成器
可迭代物件 可以直接作用於for迴圈的物件 統稱為可迭代物件 返回迭代器的物件 即iterable。一是集合資料型別,如list tuple dict set str等 二是generator,包括生成器和帶yield的generator function。容器 簡單來說 容器是一系列元素的集合 容...
生成器與迭代器
通過列表推導式,可以直接建立乙個列表,但是收到記憶體限制,列表容量肯定是有限的而且,建立乙個包含100萬個元素的列表,占用很大的儲存空間。如果我們僅僅需要訪問前面幾個元素,後面 後面元素的占用儲存空間就被浪費 所以,如果列表元素可以按照某種演算法算出來,那我們就可以再迴圈當中不斷地推導它,生成元素,...
迭代器與生成器
首先講述一下如何判斷物件是否可迭代,使用的命令為 from collections import iterable print isinstance 123,iterable 如果123是可迭代資料,則輸出ture,如果不是,則輸出false。建立乙個自己的列表 class mylist objec...