




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院信息系統(tǒng)的安全審計(jì)與監(jiān)控策略
- 醫(yī)保政策下的醫(yī)療信息化建設(shè)
- 醫(yī)療人才隊(duì)伍的國(guó)際化培養(yǎng)路徑
- 醫(yī)療信息管理系統(tǒng)的架構(gòu)設(shè)計(jì)與優(yōu)化策略
- 醫(yī)療信息化建設(shè)中的網(wǎng)絡(luò)安全防護(hù)
- 醫(yī)療設(shè)備安全監(jiān)管的培訓(xùn)課程設(shè)計(jì)
- 現(xiàn)場(chǎng)管理培訓(xùn)心得體會(huì)模版
- 新質(zhì)生產(chǎn)力表述
- 代理拓客合同范例
- 倉(cāng)庫(kù)地面改造合同范例
- 《尹定邦設(shè)計(jì)學(xué)概論》試題及答案
- 堅(jiān)持以人民為中心發(fā)展思想
- 球形網(wǎng)架屋面板安裝專(zhuān)項(xiàng)施工方案
- 三新背景下高中化學(xué)高效課堂構(gòu)建策略研究
- 新高考高中物理競(jìng)賽專(zhuān)題1力學(xué)50題競(jìng)賽真題強(qiáng)化訓(xùn)練解析版
- GB/T 6184-20001型全金屬六角鎖緊螺母
- 消毒供應(yīng)室專(zhuān)科理論考試題庫(kù)(單選、多選共500題)
- 行政執(zhí)法講座課件
- DB32T 2197-2022 水文自動(dòng)測(cè)報(bào)系統(tǒng)數(shù)據(jù)傳輸規(guī)約(修訂)
- 心肺交互作用-
- 幼兒園中班課件:《預(yù)防感冒》
評(píng)論
0/150
提交評(píng)論