Python 內置的 itertools 模塊包含了一系列用來產生不同類型迭代器的函數或類,這些函數的返回都是一個迭代器,我們可以通過 for 循環來遍歷取值,也可以使用 next() 來取值。
itertools 模塊提供的迭代器函數有以下幾種類型:
- 無限迭代器:生成一個無限序列,比如自然數序列 1, 2, 3, 4, ...;
- 有限迭代器:接收一個或多個序列(sequence)作為參數,進行組合、分組和過濾等;
- 組合生成器:序列的排列、組合,求序列的笛卡兒積等。
itertools
高效循環下創建循環器的標準庫
Infinite itertools,無限迭代器
itertools.count(start=0, step=10)
默認返回一個從0開始,依次+10的自然數迭代器,如果你不停止,它會一直運行下去。
可以用start指定開始的位置,step是步長。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import itertools c = itertools.count(start = 0 , step = 1 ) for i in c: print (i) # 0 # 10 # 20 # 30 # 40 # 50 # ... |
itertools.cycle(iterable)
傳入一個可迭代對象,然后無限循環迭代。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import itertools # itertools.count() l = [ 1 , 2 , 3 , 4 , 5 ] c = itertools.cycle(l) for i in c: print (i) # 1 # 2 # 3 # 4 # 5 # 1 # 2 # 3 # 4 # 5 # ... |
itertools.repeat(p_object, times=None)
重復迭代一個對象p_object,如果不指定times,則會迭代無數次,也可以通過times參數指定迭代的次數。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import itertools # itertools.count() l = [ 1 , 2 , 3 , 4 , 5 ] c = itertools.repeat(l, 5 ) for i in c: print (i) # [1, 2, 3, 4, 5] # [1, 2, 3, 4, 5] # [1, 2, 3, 4, 5] # [1, 2, 3, 4, 5] # [1, 2, 3, 4, 5] |
Iterators terminating on the shortest input sequence
itertools.accumulate(iterable, func)
返回序列的累計值或者其他二進制函數。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import itertools # itertools.count() l = [ 1 , 2 , 3 , 4 , 5 ] c = itertools.accumulate(l) print (c) for i in c: print (i) # 1 # 3 # 6 # 10 # 15 |
accumulate()仍然返回的是一個迭代器,傳一個list,在for循環中遍歷打印的時候發現,它做了累加操作。(迭代第一個數,就是前一個數的和,迭代到第二個數時,就是前兩個數的和,以此類推)
并且做遞加操作時支持:list, tuple, str, set, dict
傳入的是dict對象,那么會累加迭代dict的key:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import itertools # itertools.count() d = { 'a' : 1 , 'b' : 2 , 'c' : 3 } c = itertools.accumulate(d) print (c) for i in c: print (i) # <itertools.accumulate object at 0x000001F7A0A90E48> # a # ab # abc |
itertools.chain(*iterables)
chain()方法中的參數可以傳入多個序列,而且只要是序列即可,不限定序列的數據類型。
如:迭代list, tuple, str三個序列
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import itertools l = [ 1 , 2 , 3 , 4 , 5 ] t = ( 1 , 2 , 3 , 4 , 5 ) s = 'abcdefg' c = itertools.chain(l, t, s) print (c) for i in c: print (i) # <itertools.chain object at 0x0000026E64801448> # 1 # 2 # 3 # 4 # 5 # 1 # 2 # 3 # 4 # 5 # a # b # c # d # e # f # g |
itertools 笛卡爾積
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import itertools d = [ [{ "a" : 1 }, { "b" : 2 }], [{ "c" : 3 }, { "d" : 4 }, { "e" : 5 }], [{ "f" : 6 }, { "g" : 7 }] ] print ( * d) for i in itertools.product( * d): print (i) # [{'a': 1}, {'b': 2}] [{'c': 3}, {'d': 4}, {'e': 5}] [{'f': 6}, {'g': 7}] # ({'a': 1}, {'c': 3}, {'f': 6}) # ({'a': 1}, {'c': 3}, {'g': 7}) # ({'a': 1}, {'d': 4}, {'f': 6}) # ({'a': 1}, {'d': 4}, {'g': 7}) # ({'a': 1}, {'e': 5}, {'f': 6}) # ({'a': 1}, {'e': 5}, {'g': 7}) # ({'b': 2}, {'c': 3}, {'f': 6}) # ({'b': 2}, {'c': 3}, {'g': 7}) # ({'b': 2}, {'d': 4}, {'f': 6}) # ({'b': 2}, {'d': 4}, {'g': 7}) # ({'b': 2}, {'e': 5}, {'f': 6}) # ({'b': 2}, {'e': 5}, {'g': 7}) |
到此這篇關于python中的itertools模塊簡單使用的文章就介紹到這了,更多相關python itertools模塊使用內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/fengting0913/p/15504283.html