版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第Python中itertools模塊的使用教程詳解目錄itertools模塊的介紹無限迭代器(InfiniteIterators)組合迭代器(CombinatoricIterators)有限迭代器(IteratorsTerminatingontheShortestInputSequence)
itertools模塊的介紹
在Python中,迭代器(Iterator)是常用來做惰性序列的對象,只有當?shù)侥硞€值的時候,才會進行計算得出這個值。因此,迭代器可以用來存儲無限大的序列,這樣我們就不用把他一次性放在內存中,而只在需要的時候進行計算。所以,對于讀取大文件或者無線集合,最好是使用迭代器。實際上,Python2的大多數(shù)函數(shù)都是返回列表等序列,而Python3都已經改進為返回迭代器。
Python的內置模塊itertools就是用來操作迭代器的一個模塊,包含的函數(shù)都是能夠創(chuàng)建迭代器來用于for循環(huán)或者next()。其中函數(shù)主要可以分為三類,分別是無限迭代器,有限迭代器,組合迭代器。
無限迭代器(InfiniteIterators)
這些函數(shù)可以生成無限的迭代器,我們主要學習以下三個函數(shù)的用法。
count([start=0,step=1])接收兩個可選整形參數(shù),第一個指定了迭代開始的值,第二個指定了迭代的步長。此外,start參數(shù)默認為0,step參數(shù)默認為1,可以根據需要來把這兩個指定為其它值,或者使用默認參數(shù)。
importitertools
foriinitertools.count(10,2):
print(i)
ifi20:
break
[Running]python-u"e:\pythonee\code\test.py"
22
cycle(iterable)是用一個可迭代對象中的元素來創(chuàng)建一個迭代器,并且復制自己的值,一直無限的重復下去。
importitertools
foriinitertools.cycle("abcd"):
print(i)#具有無限的輸出,可以按ctrl+c來停止。
[Running]python-u"e:\pythonee\code\test.py"
b
repeat(elem[,n])是將一個元素重復n遍或者無窮多遍,并返回一個迭代器。
importitertools
foriinitertools.repeat("abcd",5):
print(i)
[Running]python-u"e:\pythonee\code\test.py"
abcd
組合迭代器(CombinatoricIterators)
組合操作包括排列,笛卡兒積,或者一些離散元素的選擇,組合迭代器就是產生這樣序列的迭代器。我們來看看這幾個函數(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ù)則表示這些可迭代序列重復的次數(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)返回的是可迭代元素中的一個排列組合,并且是按順序返回的,且不包含重復的結果。
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)返回一個可與自身重復的元素組合,用法類似于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ù)分組,并返回相應的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ù)的累計結果生成的,如果不指定的話,默認函數(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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 黑龍江省哈爾濱市德強高級中學2025-2026學年高二(上)期末物理試卷(Ⅱ卷)(含答案)
- 甘肅省武威市2025-2026學年高三(上)期末物理試卷(含答案)
- 2025~2026學年山東濟南市天橋區(qū)八年級語文第一學期期末考試試題(含答案)
- 危險化學品試題及答案
- 部編人教版六年級數(shù)學上冊期末考試題含答案
- 2022~2023民政行業(yè)職業(yè)鑒定考試題庫及答案第256期
- 2023年房屋建筑學考試復習題及參考答案
- 2022~2023糧油食品檢驗人員考試題庫及答案解析第101期
- 變頻器應用技術要點
- 三峽新能源考試題及答案
- 數(shù)字孿生方案
- 金融領域人工智能算法應用倫理與安全評規(guī)范
- 機動車駕校安全培訓課件
- 2025年役前訓練考試題庫及答案
- 2024VADOD臨床實踐指南:耳鳴的管理課件
- 2025廣東潮州府城文化旅游投資集團有限公司下屬企業(yè)副總經理崗位招聘1人筆試歷年備考題庫附帶答案詳解2套試卷
- 城市軌道交通服務與管理崗位面試技巧
- 2025年公務員多省聯(lián)考《申論》題(陜西A卷)及參考答案
- 《允許一切發(fā)生》讀書感悟
- 續(xù)保團購會活動方案
- 產品設計需求與評審表
評論
0/150
提交評論