python 標準庫 itertools

很是簡單的介紹itertools,僅僅是爲了本身能邊歷全部的python標準庫的手法之一,如下是經常使用的
itertools中的函數。python

import itertools
# 產生一個指定數組的搭配,如44,43,42總共有12種
# 對應的數學意義是排列
for i in itertools.permutations([4,4,3,2,],r=2):
    print i

#%%
# 對應的數學意義是組合 'abc' ab,ac,bc
# 還有一個相似的combinations_with_replacement能夠額外生成
# aa,bb,cc
for i in itertools.combinations(range(4),2):
    print i
#%%
# 產生一個計數的generator,該計數器沒有終點,有的話是根據另一個的數組,
# 造成imap,izip要搭配另外一個使用,不然停不下來.參數步長能夠指定每次遞增的步長
for i , z in itertools.izip(range(10),itertools.count(10,2)):
    print i ,z

#%%
# 將多個數組拆開成但個元素,逐個輸出
for i in itertools.chain(range(5),range(5,10)):
    print i

#%%
# 生成n個相同的序列,可是一旦初始化,也就是其中任意一個
# 迭代器生成以後,序列就固定了,由於每個迭代器會所以獲得
# 相同的值
for i in itertools.tee(range(3),3): 
    for j in i:
        print j

#%%
# imap的函數迭代器,跟map很像,只不過它須要的是
# 臨時的計算,不會實現所有計算完

def func(f,num):
    return f ** num

for i in itertools.imap(func,range(1,10),range(0,10)):
    print i

#%%
# izip的打包迭代器,相似zip,只不過是generator實現而已

for a,b,c in itertools.izip(range(1,5),range(5,9),range(9,13)):
    print a,b,c

#%%
# 無限循環的迭代器,能夠把一個可迭代的對象無限迭代
cycle = itertools.cycle(range(5))
for i in range(14):
    print next(cycle)

#%%
# 將一個序列按照制定的參數,進行分割一共有1個可選參數
# 兩個參數的話,直接默認第二個參數爲終點
# 多個參數,第一個爲起點,第二個爲終點,第三個爲步長

for i in itertools.islice(range(8),3):
    print i

for i in itertools.islice(range(8),1,None,2)
    print i

for i in itertools.islice(range(8),1,4,2)
    print i

#%%
# 重複生成同一個數字
for i , z in itertools.izip(range(5),itertools.repeat(10)):
    print i , z

#%%
# groupby相似sql中的groupby,第一個參數返回group的建,
# 第二個返回組

for k , g in itertools.groupby([1,1,1,1,4,4,4,3,2,222,3,3,3,1,1]):
    print k

#%%
# 過濾的迭代器ifilterfalse爲相反
def mod(x):
    if x % 2 ==0:
        return True
    else:
        return False
for i in itertools.ifilter(mod,range(10)):
    print i

#%%
# 返回序列的乘積
for i , z in itertools.product(range(3),repeat=2):
    print i ,z

#%%
# 根據selectors選擇杜英的元素,返回一個tuple
for i in itertools.compress(range(10),itertools.cycle([0,1])):
    print i

#%%
# 遇到第一個達到不知足條件的狀況的時候,截取後半段的數組
# 和takewhile相反
for i in itertools.dropwhile(lambda x: x<5, [1,4,6,4,1]):
    print i

#%%
# izip_longest相似izip,可是izip是最短的配對,意味着長度爲3的數組和
# 長度爲5的數組,最後的輸出是3個.可是該函數提供填補位,能夠
# 指定缺失位置的數值

for i , z in itertools.izip_longest(xrange(10),xrange(5),fillvalue=3):
    print i , z
相關文章
相關標籤/搜索