




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第Python中itertools模塊的使用教程詳解目錄itertools模塊的介紹無限迭代器(InfiniteIterators)組合迭代器(CombinatoricIterators)有限迭代器(IteratorsTerminatingontheShortestInputSequence)
itertools模塊的介紹
在Python中,迭代器(Iterator)是常用來做惰性序列的對象,只有當(dāng)?shù)侥硞€(gè)值的時(shí)候,才會(huì)進(jìn)行計(jì)算得出這個(gè)值。因此,迭代器可以用來存儲(chǔ)無限大的序列,這樣我們就不用把他一次性放在內(nèi)存中,而只在需要的時(shí)候進(jìn)行計(jì)算。所以,對于讀取大文件或者無線集合,最好是使用迭代器。實(shí)際上,Python2的大多數(shù)函數(shù)都是返回列表等序列,而Python3都已經(jīng)改進(jìn)為返回迭代器。
Python的內(nèi)置模塊itertools就是用來操作迭代器的一個(gè)模塊,包含的函數(shù)都是能夠創(chuàng)建迭代器來用于for循環(huán)或者next()。其中函數(shù)主要可以分為三類,分別是無限迭代器,有限迭代器,組合迭代器。
無限迭代器(InfiniteIterators)
這些函數(shù)可以生成無限的迭代器,我們主要學(xué)習(xí)以下三個(gè)函數(shù)的用法。
count([start=0,step=1])接收兩個(gè)可選整形參數(shù),第一個(gè)指定了迭代開始的值,第二個(gè)指定了迭代的步長。此外,start參數(shù)默認(rèn)為0,step參數(shù)默認(rèn)為1,可以根據(jù)需要來把這兩個(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è)可迭代對象中的元素來創(chuàng)建一個(gè)迭代器,并且復(fù)制自己的值,一直無限的重復(fù)下去。
importitertools
foriinitertools.cycle("abcd"):
print(i)#具有無限的輸出,可以按ctrl+c來停止。
[Running]python-u"e:\pythonee\code\test.py"
b
repeat(elem[,n])是將一個(gè)元素重復(fù)n遍或者無窮多遍,并返回一個(gè)迭代器。
importitertools
foriinitertools.repeat("abcd",5):
print(i)
[Running]python-u"e:\pythonee\code\test.py"
abcd
組合迭代器(CombinatoricIterators)
組合操作包括排列,笛卡兒積,或者一些離散元素的選擇,組合迭代器就是產(chǎn)生這樣序列的迭代器。我們來看看這幾個(gè)函數(shù)的用法。
product(*iterables,repeat=1)得到的是可迭代對象的笛卡兒積,*iterables參數(shù)表示需要多個(gè)可迭代對象。這些可迭代對象之間的笛卡兒積,也可以使用for循環(huán)來實(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)的長度,我們來嘗試一下傳入第二個(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)返回的是可迭代對象所有的長度為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ù)的元素組合,用法類似于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ù)有十來個(gè),主要為大家介紹其中幾個(gè)常用的函數(shù)。
chain(*iterables)可以把多個(gè)可迭代對象組合起來,形成一個(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 無人機(jī)數(shù)據(jù)采集和分析試題及答案
- 《課件亮點(diǎn)紛呈》課件
- 企業(yè)管理變革與創(chuàng)新
- 《講師劉建亮》課件
- 高中語文聽課心得體會(huì)模版
- 英語十六時(shí)態(tài)表格完整總結(jié)模版
- 《社區(qū)兒童活動(dòng)規(guī)劃》課件
- 醫(yī)師資格考試2025年臨床執(zhí)業(yè)助理醫(yī)師資格考試考點(diǎn)總結(jié)模版
- 先進(jìn)生產(chǎn)力是新質(zhì)生產(chǎn)力
- 冬季疾病防治培訓(xùn)
- 人教版(2024)七年級(jí)下冊Unit 3 Keep fit 素養(yǎng)檢測(含解析)
- 2025年四川省成都市成華區(qū)中考二診英語試題(含筆試答案無聽力音頻及原文)
- 綏化綏化市2025年度“市委書記進(jìn)校園”事業(yè)單位引才287人筆試歷年參考題庫附帶答案詳解
- 歷史七年級(jí)歷史下冊期中復(fù)習(xí)知識(shí)點(diǎn)梳理課件 2024-2025學(xué)年七年級(jí)歷史下冊(統(tǒng)編版2024)
- 管道試壓吹掃方案
- 醫(yī)院檢驗(yàn)科實(shí)驗(yàn)室生物安全程序文件SOP
- 封條模板A4直接打印版
- 雙減背景下的作業(yè)設(shè)計(jì)與實(shí)施優(yōu)秀案例PPT
- 古典概型 教學(xué)設(shè)計(jì)
- 鋼管截面積、強(qiáng)度、撓度、慣性矩計(jì)算公式
- 施工現(xiàn)場平面布置和臨時(shí)設(shè)施、臨時(shí)道路布置
評論
0/150
提交評論