迭代的模組itertools

2021-07-10 23:05:14 字數 3218 閱讀 5782

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 會...