




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第Python中itertools模塊的使用教程詳解目錄itertools模塊的介紹無限迭代器(InfiniteIterators)組合迭代器(CombinatoricIterators)有限迭代器(IteratorsTerminatingontheShortestInputSequence)
itertools模塊的介紹
在Python中,迭代器(Iterator)是常用來做惰性序列的對象,只有當?shù)侥硞€值的時候,才會進行計算得出這個值。因此,迭代器可以用來存儲無限大的序列,這樣我們就不用把他一次性放在內(nèi)存中,而只在需要的時候進行計算。所以,對于讀取大文件或者無線集合,最好是使用迭代器。實際上,Python2的大多數(shù)函數(shù)都是返回列表等序列,而Python3都已經(jīng)改進為返回迭代器。
Python的內(nèi)置模塊itertools就是用來操作迭代器的一個模塊,包含的函數(shù)都是能夠創(chuàng)建迭代器來用于for循環(huán)或者next()。其中函數(shù)主要可以分為三類,分別是無限迭代器,有限迭代器,組合迭代器。
無限迭代器(InfiniteIterators)
這些函數(shù)可以生成無限的迭代器,我們主要學習以下三個函數(shù)的用法。
count([start=0,step=1])接收兩個可選整形參數(shù),第一個指定了迭代開始的值,第二個指定了迭代的步長。此外,start參數(shù)默認為0,step參數(shù)默認為1,可以根據(jù)需要來把這兩個指定為其它值,或者使用默認參數(shù)。
importitertools
foriinitertools.count(10,2):
print(i)
ifi20:
break
[Running]python-u"e:\pythonee\code\test.py"
22
cycle(iterable)是用一個可迭代對象中的元素來創(chuàng)建一個迭代器,并且復(fù)制自己的值,一直無限的重復(fù)下去。
importitertools
foriinitertools.cycle("abcd"):
print(i)#具有無限的輸出,可以按ctrl+c來停止。
[Running]python-u"e:\pythonee\code\test.py"
b
repeat(elem[,n])是將一個元素重復(fù)n遍或者無窮多遍,并返回一個迭代器。
importitertools
foriinitertools.repeat("abcd",5):
print(i)
[Running]python-u"e:\pythonee\code\test.py"
abcd
組合迭代器(CombinatoricIterators)
組合操作包括排列,笛卡兒積,或者一些離散元素的選擇,組合迭代器就是產(chǎn)生這樣序列的迭代器。我們來看看這幾個函數(shù)的用法。
product(*iterables,repeat=1)得到的是可迭代對象的笛卡兒積,*iterables參數(shù)表示需要多個可迭代對象。這些可迭代對象之間的笛卡兒積,也可以使用for循環(huán)來實現(xiàn),例如product(A,B)與((x,y)forxinAforyinB)就實現(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)實現(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)返回的是可迭代元素中的一個排列組合,并且是按順序返回的,且不包含重復(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')
當然,第2個參數(shù)默認為None,它表示的是返回元組(tuple)的長度,我們來嘗試一下傳入第二個參數(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的子序列,注意這與前一個函數(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)返回一個可與自身重復(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ù)有十來個,主要為大家介紹其中幾個常用的函數(shù)。
chain(*iterables)可以把多個可迭代對象組合起來,形成一個更大的迭代器。
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])可以計算出一個迭代器,這個迭代器是由特定的二元函數(shù)的累計結(jié)果生成的,如果不指定的話,默認函數(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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年樹脂型膠粘劑合作協(xié)議書
- 2025年河北石家莊學院選聘事業(yè)單位考試試題【答案】
- 2025年喀什地區(qū)招聘中學教師考試試題【答案】
- 2025年吉林省直事業(yè)單位招聘考試試題【答案】
- 2025年克拉瑪依市消防救援支隊招聘政府專職消防員考試試題【答案】
- 2025年院前急救信息系統(tǒng)合作協(xié)議書
- 河北非營利組織免稅資格認定申請表
- 畢業(yè)實習周記范文
- 2025年新型膜材料及其裝置合作協(xié)議書
- 2025年電子握力計項目發(fā)展計劃
- 港口裝卸作業(yè)培訓
- 2025年湖北省武漢市中考數(shù)學真題(無答案)
- 鉗工考試試題及答案
- 2025至2030中國牙科氧化鋯塊行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 拖欠維修費車輛以車抵債協(xié)議范本
- 2025至2030中國復(fù)印機行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 暑假安全家長會4
- 2024年安徽省泗縣衛(wèi)生局公開招聘試題帶答案
- 2025年北京市高考化學試卷真題(含答案)
- 2025年重慶市中考化學試卷真題(含標準答案)
- JG/T 202-2007工程管道用聚氨酯、蛭石絕熱材料支吊架
評論
0/150
提交評論