itertools模塊超實用方法

相信你們在學習python的過程當中都用到過這個模塊,可是可能只是用到了其中的一兩個方法,對於其更強大的功能沒有更深的認識。今天我就按照本身的方式向你們介紹一下這個模塊。
groupby:用於分組python

rows=[
    {'name':'jim','date':'07/01'},
    {'name':'tom','date':'07/01'},
    {'name':'rose','date':'07/01'},
    {'name':'tom','date':'07/02'},
    {'name':'jim','date':'07/03'},
    {'name':'rose','date':'07/02'},
]
#groupby只能對連續數據進行分組,所以不能肯定數據有序的狀況下,建議進行排序操做
gbrows=sorted(rows,key=itemgetter['date'])

for gbdata,row in gbrows(gbrows,key=itemgetter['date'])
    print(gbdata)
    for i in row:
        print(i)
        
#如下是輸出結果:
07/01/2018
{'name': 'jim', 'date': '07/01/2018'}
{'name': 'tom', 'date': '07/01/2018'}
{'name': 'rose', 'date': '07/01/2018'}
07/02/2018
{'name': 'tom', 'date': '07/02/2018'}
{'name': 'rose', 'date': '07/02/2018'}
07/03/2018
{'name': 'jim', 'date': '07/03/2018'}

permutations:按照給定位數對可迭代對象內元素進行組合segmentfault

listed = ['a','b','c','d']

for i in permutations(listed,3):
    print(i)

#如下是輸出結果(因爲結果比較多,我對格式進行了變化,但數據都是正確的)
('a', 'b', 'c') ('a', 'b', 'd') ('a', 'c', 'b') ('a', 'c', 'd') ('a', 'd', 'b') ('a', 'd', 'c')
('b', 'a', 'c') ('b', 'a', 'd') ('b', 'c', 'a') ('b', 'c', 'd') ('b', 'd', 'a')
('b', 'd', 'c')
('c', 'a', 'b') ('c', 'a', 'd') ('c', 'b', 'a') ('c', 'b', 'd') ('c', 'd', 'a') ('c', 'd', 'b')
('d', 'a', 'b') ('d', 'a', 'c') ('d', 'b', 'a') ('d', 'b', 'c') ('d', 'c', 'a') ('d', 'c', 'b')

combinations:按照給定位數對可迭代對象內元素進行組合,可是結果不重複函數

listed = ['a','b','c','d']

for i in combinations(listed,3):
    print(i)
#如下是輸出結果
('a', 'b', 'c')
('a', 'b', 'd')
('a', 'c', 'd')
('b', 'c', 'd')

combinations_with_replacement:與combinations區別就是同一元素可使用屢次學習

listed = ['a','b','c']    #因爲結果數據太多,我減小源數據量

for i in combinations_with_replacement(listed,3):
    print(i)
    
#如下是輸出結果
('a', 'a', 'a')
('a', 'a', 'b')
('a', 'a', 'c')
('a', 'b', 'b')
('a', 'b', 'c')
('a', 'c', 'c')
('b', 'b', 'b')
('b', 'b', 'c')
('b', 'c', 'c')
('c', 'c', 'c')

zip_longest:對多個數據按索引進行組合,並根據迭代對象的大小,不足使用fillvalue默認值替代code

a=[1,2,3]
b=['a','b']

for i in zip_longest(a,b,fillvalue="nihao"):
    print(i)
    
for i in zip(a,b):
    print(i)    
#zip是一個python內置函數,與zip_longest不一樣的是匹配到迭代對象最小的最後元素就結束
#結果對比:
zip_lengest:            zip:
    (1, 'a')                (1, 'a')
    (2, 'b')                (2, 'b')
    (3, 'nihao')

dropwhile:對可迭代對象的元素依次進行函數過濾,遇到返回False的元素就中止對象

listed=[-1,0,-3,2,-5,4,2]

for i in dropwhile(lambda s:s<3,listed):
    print(i)
    
#輸出結果:
4
2

product:能夠說是combinations的升級版,對多個序列進行組合,且無重複排序

list1=[1,2,3]
list2=[4,5]
list3=['a']

for i in product(list1,list2,list3):
    print(i)
#結果:
(1, 4, 'a')
(1, 5, 'a')
(2, 4, 'a')
(2, 5, 'a')
(3, 4, 'a')
(3, 5, 'a')

islice:對迭代器,可迭代對象進行切片操做索引

iter=(i for i in range(10))

for i in islice(iter,0,10,2):
    print(i)
#結果爲:
0
2
4
6
8

chain:對多個可迭代對象進行組合ip

list1=[1,2,3]

set1={'a','b'}

for i in chain(list1,set1):
    print(i)

總結:itertools這個模塊能夠解決之後咱們對多個iterable進行組合的問題。
更詳細的分類能夠參考:https://segmentfault.com/a/11...get

相關文章
相關標籤/搜索