Python中itertools模塊的使用教程詳解_第1頁(yè)
Python中itertools模塊的使用教程詳解_第2頁(yè)
Python中itertools模塊的使用教程詳解_第3頁(yè)
Python中itertools模塊的使用教程詳解_第4頁(yè)
Python中itertools模塊的使用教程詳解_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第Python中itertools模塊的使用教程詳解目錄itertools模塊的介紹無(wú)限迭代器(InfiniteIterators)組合迭代器(CombinatoricIterators)有限迭代器(IteratorsTerminatingontheShortestInputSequence)

itertools模塊的介紹

在Python中,迭代器(Iterator)是常用來(lái)做惰性序列的對(duì)象,只有當(dāng)?shù)侥硞€(gè)值的時(shí)候,才會(huì)進(jìn)行計(jì)算得出這個(gè)值。因此,迭代器可以用來(lái)存儲(chǔ)無(wú)限大的序列,這樣我們就不用把他一次性放在內(nèi)存中,而只在需要的時(shí)候進(jìn)行計(jì)算。所以,對(duì)于讀取大文件或者無(wú)線集合,最好是使用迭代器。實(shí)際上,Python2的大多數(shù)函數(shù)都是返回列表等序列,而Python3都已經(jīng)改進(jìn)為返回迭代器。

Python的內(nèi)置模塊itertools就是用來(lái)操作迭代器的一個(gè)模塊,包含的函數(shù)都是能夠創(chuàng)建迭代器來(lái)用于for循環(huán)或者next()。其中函數(shù)主要可以分為三類(lèi),分別是無(wú)限迭代器,有限迭代器,組合迭代器。

無(wú)限迭代器(InfiniteIterators)

這些函數(shù)可以生成無(wú)限的迭代器,我們主要學(xué)習(xí)以下三個(gè)函數(shù)的用法。

count([start=0,step=1])接收兩個(gè)可選整形參數(shù),第一個(gè)指定了迭代開(kāi)始的值,第二個(gè)指定了迭代的步長(zhǎng)。此外,start參數(shù)默認(rèn)為0,step參數(shù)默認(rèn)為1,可以根據(jù)需要來(lái)把這兩個(gè)指定為其它值,或者使用默認(rèn)參數(shù)。

importitertools

foriinitertools.count(10,2):

print(i)

ifi20:

break

[Running]python-u"e:\pythonee\code\test.py"

22

cycle(iterable)是用一個(gè)可迭代對(duì)象中的元素來(lái)創(chuàng)建一個(gè)迭代器,并且復(fù)制自己的值,一直無(wú)限的重復(fù)下去。

importitertools

foriinitertools.cycle("abcd"):

print(i)#具有無(wú)限的輸出,可以按ctrl+c來(lái)停止。

[Running]python-u"e:\pythonee\code\test.py"

b

repeat(elem[,n])是將一個(gè)元素重復(fù)n遍或者無(wú)窮多遍,并返回一個(gè)迭代器。

importitertools

foriinitertools.repeat("abcd",5):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

abcd

組合迭代器(CombinatoricIterators)

組合操作包括排列,笛卡兒積,或者一些離散元素的選擇,組合迭代器就是產(chǎn)生這樣序列的迭代器。我們來(lái)看看這幾個(gè)函數(shù)的用法。

product(*iterables,repeat=1)得到的是可迭代對(duì)象的笛卡兒積,*iterables參數(shù)表示需要多個(gè)可迭代對(duì)象。這些可迭代對(duì)象之間的笛卡兒積,也可以使用for循環(huán)來(lái)實(shí)現(xiàn),例如product(A,B)與((x,y)forxinAforyinB)就實(shí)現(xiàn)一樣的功能。

importitertools

foriinduct([1,2,3],[4,5,6]):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

(1,4)

(1,5)

(1,6)

(2,4)

(2,5)

(2,6)

(3,4)

(3,5)

(3,6)

而repeat參數(shù)則表示這些可迭代序列重復(fù)的次數(shù)。例如product(A,repeat=4)與product(A,A,A,A)實(shí)現(xiàn)的功能一樣。

importitertools

foriinduct('ab','cd',repeat=2):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

('a','c','a','c')

('a','c','a','d')

('a','c','b','c')

('a','c','b','d')

('a','d','a','c')

('a','d','a','d')

('a','d','b','c')

('a','d','b','d')

('b','c','a','c')

('b','c','a','d')

('b','c','b','c')

('b','c','b','d')

('b','d','a','c')

('b','d','a','d')

('b','d','b','c')

('b','d','b','d')

permutations(iterable,r=None)返回的是可迭代元素中的一個(gè)排列組合,并且是按順序返回的,且不包含重復(fù)的結(jié)果。

importitertools

foriinitertools.permutations('abc'):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

('a','b','c')

('a','c','b')

('b','a','c')

('b','c','a')

('c','a','b')

('c','b','a')

當(dāng)然,第2個(gè)參數(shù)默認(rèn)為None,它表示的是返回元組(tuple)的長(zhǎng)度,我們來(lái)嘗試一下傳入第二個(gè)參數(shù)。

importitertools

foriinitertools.permutations('abc',2):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

('a','b')

('a','c')

('b','a')

('b','c')

('c','a')

('c','b')

combinations(iterable,r)返回的是可迭代對(duì)象所有的長(zhǎng)度為r的子序列,注意這與前一個(gè)函數(shù)permutation不同,permutation返回的是排列,而combinations返回的是組合。

importitertools

foriinbinations('1234',2):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

('1','2')

('1','3')

('1','4')

('2','3')

('2','4')

('3','4')

combinations_with_replacement(iterable,r)返回一個(gè)可與自身重復(fù)的元素組合,用法類(lèi)似于combinations。

importitertools

foriinbinations_with_replacement('1234',2):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

('1','1')

('1','2')

('1','3')

('1','4')

('2','2')

('2','3')

('2','4')

('3','3')

('3','4')

('4','4')

有限迭代器(IteratorsTerminatingontheShortestInputSequence)

這里的函數(shù)有十來(lái)個(gè),主要為大家介紹其中幾個(gè)常用的函數(shù)。

chain(*iterables)可以把多個(gè)可迭代對(duì)象組合起來(lái),形成一個(gè)更大的迭代器。

importitertools

foriinitertools.chain('good','bye'):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

e

groupby(iterable,key=None)可以把相鄰元素按照key函數(shù)分組,并返回相應(yīng)的key和groupby,如果key函數(shù)為None,則只有相同的元素才能放在一組。

importitertools

forkey,groupinitertools.groupby('AaaBBbcCAAa',lambdac:c.upper()):

print(list(group))

[Running]python-u"e:\pythonee\code\test.py"

['A','a','a']

['B','B','b']

['c','C']

['A','A','a']

accumulate(iterable[,func])可以計(jì)算出一個(gè)迭代器,這個(gè)迭代器是由特定的二元函數(shù)的累計(jì)結(jié)果生成的,如果不指定的話,默認(rèn)函數(shù)為求和函數(shù)。

importitertools

foriinitertools.accumulate([0,1,0,1,1,2,3,5]):

print(i)

[Running]python

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論