python itertools 模組講解

2021-09-20 10:32:53 字數 1910 閱讀 6190

1、介紹

itertools 是python的迭代器模組,itertools提供的工具相當高效且節省記憶體。

使用這些工具,你將能夠建立自己定製的迭代器用於高效率的迴圈。

- 無限迭代器

itertools包自帶了三個可以無限迭代的迭代器。這意味著,當你使用他們時,你要知道要的到底是最終會停止的迭代器,還是需要無限地迭代鞋去。

(1)count(初值=0, 步長=1):count 迭代器會返回從傳入的起始引數開始的均勻間隔的數值。count 也可以接收指定的步長引數。我們來看乙個簡單的例子:

(2)islice(count(10), 5):從 10 開始,輸出 5 個元素後結束。islice 的第二個引數控制何時停止迭代。但其含義並不是」達到數字 5 時停止「,而是」當迭代了 5 次之後停止「。

(3)cycle:這裡我們建立了乙個 for 迴圈,使其在三個字母 xyz 間無限迴圈。當然,我們並不真地想要永遠迴圈下去,所以我們新增了乙個簡單的計數器來跳出迴圈。

- 可終止迭代器

(1)accumulate(可迭代物件[, 函式])

accumulate 迭代器將返回累計求和結果,或者傳入兩個引數的話,由傳入的函式累積計算的結果。預設設定為相加,我們趕快試一試吧:

這裡,我們 匯入了 accumulate,然後傳入 10 個數字,0-9。迭代器將傳入數字依次累加,所以第乙個是 0 ,第二個是 0+1, 第三個是 1+2,如此下去。現在我們匯入 operator 模組,然後新增進去:

這裡我們傳入了數字 1-4 到 accumulate 迭代器中。我們還傳入了乙個函式:operator.mul,這個函式將接收的引數相乘。所以每一次迭代,迭代器將以乘法代替除法(1×1=1, 1×2=2, 2×3=6, 以此類推)。

accumulate 的文件中給出了其他一些有趣的例子,例如貸款分期償還,混沌遞推關係等。這絕對值得你花時間去看一看。

(2)chain(*可迭代物件)

chain 迭代器能夠將多個可迭代物件合併成乙個更長的可迭代物件。實際上,我參與的乙個專案中最近就需要這一功能。我有乙個列表,裡面已經包含一些元素,接著想把另外兩個列表新增到最初那個列表中。注意,我們想新增的是兩個列表的元素。最初,我是這樣做的:

方式一: 

這並不是我想要的。itertools 模組提供乙個優雅得多的方法用chain 來合併這些列表:

方式二:

許多聰明的讀者可能想到了,實際上不使用 itertools,也有其他方法能夠實現這一要求。你可以這樣做:

方式三:

這些方法當然都是可行的。在我知道 chain 之前,我可能會這樣做,但我個人認為這個例子中, chain 更為優雅,也更容易理解。

python itertools模組初學

usr bin python3 coding utf 8 time 2019 9 5 0005 20 18 author p.d site file demo.py import itertools 簡單來說就是累加。x itertools.accumulate range 101 print li...

python itertools功能詳解

使用只需簡單一句匯入 import itertools 與其名稱意義一樣,給它乙個列表如 lists tuples iterables,鏈結在一起 返回iterables物件。letters a b c d e f booleans 1,0,1,0,0,1 print list itertools....

Python itertools 操作迭代物件

python 的內建模組itertools提供了很多操作迭代物件的方法 返回乙個可無限迭代的迭代器,可以用於產生自然數 import itertools natuals itertools.count 1 1可以省略不屑,預設從0開始 for n in natuals print n 123 會無限...