昨天見到了一個python的内模組化塊-itertools。今天總結一下:
itertools提供了非常有用的用于操作疊代對象的函數,整理如下
首先,我們看看itertools提供的幾個“無限”疊代器
-
count()
eg:
import itertools
arr = itertools.count(1)
for n in arr:
print(n)
這裡會從1開始列印出序列,程式不會結束,除非自己中斷程式。如果上面count()傳2,就會從2開始遞增列印。如下:

2. cycle()
eg::
import itertools
s = itertools.cycle('ABC')
for c in s:
print(c)
這個方法會把傳入的一個序列無限重複下去,如下:
3. repeat()
eg:
import itertools
s = itertools.repeat('A', 5)
for n in s:
print(n)
負責把一個元素無限重複下去,提供的第二個參數就可以限定重複次數,如下:
注意:
無限序列雖然可以無限疊代下去,但是通常會通過takewhile()等函數根據條件判斷來截取出一個有限的序列
eg:
import itertools
arr = itertools.count(1)
s = itertools.takewhile(lambda x: x <= 10, arr)
for n in s:
print(n)
這樣就會列印出1到10,不會無限疊代。
了解itertools提供的幾個疊代器操作函數
-
chain()
eg:
import itertools
for c in itertools.chain('ABC', 'XYZ'):
print(c)
chain()可以把一組疊代對象串聯起來,形成一個更大的疊代器,看運作結果:
2. groupby()
eg:
import itertools
for key, group in itertools.groupby('AAABBBCCAAA'):
print(key, list(group))
把疊代器中相鄰的重複元素挑出來放在一起,
說明:
這裡的挑選規則是通過函數完成的,隻要作用于函數的兩個元素傳回的值相等,這兩個元素就被認為是在一組的,而函數傳回值作為組的key。
import itertools
for key, group in itertools.groupby('AaaBBbcCAAa', lambda c: c.upper()):
print(key, list(group))