pythonitertools模塊講解-創(chuàng)新互聯(lián)

1、介紹
itertools 是python的迭代器模塊,itertools提供的工具相當高效且節(jié)省內存。
使用這些工具,你將能夠創(chuàng)建自己定制的迭代器用于高效率的循環(huán)。
- 無限迭代器
itertools包自帶了三個可以無限迭代的迭代器。這意味著,當你使用他們時,你要知道要的到底是最終會停止的迭代器,還是需要無限地迭代鞋去。
(1)count(初值=0, 步長=1):count 迭代器會返回從傳入的起始參數開始的均勻間隔的數值。count 也可以接收指定的步長參數。我們來看一個簡單的例子:

成都網絡公司-成都網站建設公司成都創(chuàng)新互聯(lián)十余年經驗成就非凡,專業(yè)從事網站設計制作、成都網站制作,成都網頁設計,成都網頁制作,軟文平臺,一元廣告等。十余年來已成功提供全面的成都網站建設方案,打造行業(yè)特色的成都網站建設案例,建站熱線:18980820575,我們期待您的來電!
'''
遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:857662006 
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
>>> from itertools import count
>>> for i in count(10): #從10開始無限循環(huán)
... if i > 20: 
... break
... else:
... print(i)
... 
10
11
12
13
14
15
16
17
18
19
20

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

>>> from itertools import islice
>>> for i in islice(count(10), 5):
... print(i)
... 
10
11
12
13
14

(3)cycle:這里我們創(chuàng)建了一個 for 循環(huán),使其在三個字母 XYZ 間無限循環(huán)。當然,我們并不真地想要永遠循環(huán)下去,所以我們添加了一個簡單的計數器來跳出循環(huán)。

'''
遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:857662006 
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
>>> from itertools import cycle
>>> count = 0
>>> for item in cycle('XYZ'):
... if count > 7:
... break
... print(item)
... count += 1
... 
X
Y
Z
X
Y
Z
X
Y

- 可終止迭代器
(1)accumulate(可迭代對象[, 函數])
  accumulate 迭代器將返回累計求和結果,或者傳入兩個參數的話,由傳入的函數累積計算的結果。默認設定為相加,我們趕快試一試吧:

>> from itertools import accumulate
>>> list(accumulate(range(10)))
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45]

這里,我們 導入了 accumulate,然后傳入 10 個數字,0-9。迭代器將傳入數字依次累加,所以第一個是 0 ,第二個是 0+1, 第三個是 1+2,如此下去。現在我們導入 operator 模塊,然后添加進去:

>>> import operator
>>> list(accumulate(range(1, 5), operator.mul))
[1, 2, 6, 24]

這里我們傳入了數字 1-4 到 accumulate 迭代器中。我們還傳入了一個函數:operator.mul,這個函數將接收的參數相乘。所以每一次迭代,迭代器將以乘法代替除法(1×1=1, 1×2=2, 2×3=6, 以此類推)。
 accumulate 的文檔中給出了其他一些有趣的例子,例如貸款分期償還,混沌遞推關系等。這絕對值得你花時間去看一看。
(2)chain(*可迭代對象)
  chain 迭代器能夠將多個可迭代對象合并成一個更長的可迭代對象。實際上,我參與的一個項目中最近就需要這一功能。我有一個列表,里面已經包含一些元素,接著想把另外兩個列表添加到最初那個列表中。注意,我們想添加的是兩個列表的元素。最初,我是這樣做的:
方式一:

'''
遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:857662006 
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
>>> my_list = ['foo', 'bar']
>>> numbers = list(range(5))
>>> cmd = ['ls', '/some/dir']
>>> my_list.append(cmd)
>>> my_list.append(numbers)
>>> my_list
['foo', 'bar', ['ls', '/some/dir'], [0, 1, 2, 3, 4]]

這并不是我想要的。itertools 模塊提供一個優(yōu)雅得多的方法用chain 來合并這些列表:
方式二:

>>> from itertools import chain
>>> my_list = list(chain(['foo', 'bar'], cmd, numbers))
>>> my_list
['foo', 'bar', 'ls', '/some/dir', 0, 1, 2, 3, 4]

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

'''
遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流QQ群:857662006 
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
>>> my_list = ['foo', 'bar']
>>> my_list += cmd + numbers
>>> my_list
['foo', 'bar', 'ls', '/some/dir', 0, 1, 2, 3, 4]

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

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文題目:pythonitertools模塊講解-創(chuàng)新互聯(lián)
文章位置:http://muchs.cn/article40/idgeo.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供做網站、網站導航、網站建設、企業(yè)網站制作、品牌網站設計、網站內鏈

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網站托管運營