itertools模組提供的全部是處理迭代功能的函式,他們的返回值不是list,而是迭代物件,只有在for迴圈的時候才會真正去計算。
使用迭代器的好處是在迴圈的時候才去取值,而直接返回值為list的結果會占用大量的記憶體,從而使用迭代器的話,使用了惰計算的方式,或者是延遲計算,從而在效能上能好很多。
在使用import的時候,具有兩種方式,如下:
import itertools
from itertools import *
第一種是直接進行匯入,在使用模組裡的函式的時候,必須帶有字首itertools,然後用.進行應用
第二種是from import形式,在使用模組裡的函式的時候,直接使用函式名即可,不需要帶itertools的字首
1、 迭代器imap和map的使用
itre = itertools.imap(pow,[1,2,3],[1,2,3])
print itre
for i in itre:
print i
li = map(pow,[1,2,3],[1,2,3])
print li
執行結果如下:
1427
[1, 4, 27]
從結果中可以看到,imap函式返回的是乙個迭代器,而map函式返回的是乙個list
2、 迭代器ifilter和filter的使用
ifil = itertools.ifilter(lambda x:x >5 ,range(10))
print ifil
for i in ifil:
print i
ifilfalse = itertools.ifilte***lse(lambda x:x>5,range(10))
print ifilfalse
for i in ifilfalse:
print i
li = filter(lambda x:x>5,range(10))
print li
執行結果如下:
678
9012
345[6, 7, 8, 9]
從執行結果可以看到,ifilter和filter和ifilte***lse都是起到乙個過濾的作用,但是ifilter和ifilte***lse都是返回乙個迭代器,而filter則是返回乙個列表
3、 迭代器takewhile和dropwhile函式
take = itertools.takewhile(lambda x:x>5,[6,2,6,7,3])
for i in take:
print 'this is the takewhile function ',i
drop = itertools.dropwhile(lambda x:x>5,[1,2,6,7,3])
for i in drop:
print 'this is the dropwhile function ',i
takewhile函式表示遇到true進行收集到迭代器中,遇到false之後,退出
driopwhile函式表示遇到false的時候,跳過此元素,當true的時候收集剩餘的元素,執行結果如下:
this is the takewhile function 6
this is the dropwhile function 1
this is the dropwhile function 2
this is the dropwhile function 6
this is the dropwhile function 7
this is the dropwhile function 3
4、 迭代器groupby方法
import itertools
def height_alias(height):
if height > 180:
return 'tall'
elif height < 160:
return 'short'
else:
return 'middle'
persons = [191,159,156,170,177,190,183,185]
sorted(persons,key=height_alias)
for m,n in itertools.groupby(persons,key=height_alias):
print m
print (list(n))
groupby主要是將相鄰的相同的元素放在一起,然後進行返回,在上述的方法中,可以看到使用sorted方法,主要是將資料進行排序,然後挑選相鄰的元素將符合條件的進行輸出,得到乙個統計的作用,執行結果如下:
tall
[191]
short
[159, 156]
middle
[170, 177]
tall
[190, 183, 185]
groupby(iterable [,key]):
建立乙個迭代器,對iterable生成的連續項進行分組,在分組過程中會查詢重複項。
如果iterable在多次連續迭代中生成了同一項,則會定義乙個組,如果將此函式應用乙個分類列表,那麼分組將定義該列表中的所有唯一項,key(如果已提供)是乙個函式,應用於每一項,如果此函式存在返回值,該值將用於後續項而不是該項本身進行比較,此函式返回的迭代器生成元素(key, group),其中key是分組的鍵值,group是迭代器,生成組成該組的所有項。
5、 chain函式
主要是將幾個序列進行加起來,然後返回乙個迭代器,itertools.chain('kel','other')
6、 count函式
主要輸出自然序列,第乙個為開始的數字,第二個引數為步長,itertools.count(2,2),輸出從2開始,以2為步長的無限迭代器
7、 cycle函式
主要是將乙個序列無限輸出,重複,itertools.cycle('kel')
8、 repeat函式
主要是進行重複乙個序列,第二個引數為重複的次數 ,itertools.repeat('kel',2)表示將序列kel重複兩次的迭代器
itertools模組的用法
itertools模組是python的乙個內建模組,它提供了非常有用的用於操作迭代物件的函式。x itertools.cycle 123 for i in x print i 輸出結果 1 2 3 1 2 import itertools natuals itertools.count 1 for ...
itertools模組的使用
打破順序,可能出現的所有情況,可能同乙個元祖中順序不同的情況下,元素相同 permutations 是排列函式 所有元素重排列為所有可能的情況 將元素之間的順序打亂成所有可能的情況 以元祖的形式返回。案例1 import itertools a 1,2,3 n 0 for i in itertool...
內建模組 itertools
python的內建模組itertools提供了非常有用的用於操作迭代物件的函式。首先,我們看看itertools提供的幾個 無限 迭代器 import itertools natuals itertools.count 1 for n in natuals print n 123 因為count 會...