1. 程式人生 > >python 學習彙總26:itertools函式彙總簡表( tcy)

python 學習彙總26:itertools函式彙總簡表( tcy)

itertools 2018 / 9 / 13


 

 說明 

用途:
操作迭代物件;為高效迴圈建立迭代器的函式
模組標準化一套核心快速高效記憶體工具,一起構成一個“迭代器代數”
很好處理operator模組中高速功能。
# 將乘法運算子對映到2向量形成高效點積:sum(map(operator.mul,vector1,vector2))
分類:
基於現有迭代器建立新迭代器的函式。
用於將迭代器的元素視為函式引數的函式。
用於選擇迭代器輸出的部分的函式。
一個用於分組迭代器輸出的函式。
小結:
itertools模組提供的全部是處理迭代功能的函式,返回Iterator
只有用for迴圈迭代的時候才真正計算。
No 函式 說明
1 accumulate(iterable [,func ] )                        根據條件(func2(x,y)=最大,累積乘)累計前n個元素; data = [3, 4, 6, 2, 1, 9, 0, 7]                                                               list(accumulate(data, operator.mul)) # [3, 12, 72, 144, 144, 1296, 0, 0]
        主要用於operator函式。 list(accumulate(data, max))                                                                # [3, 4, 6, 6, 6, 9, 9, 9, 9, 9]     
        a1=list(itertools.accumulate(range(1,6), lambda x, y: x*10 + y))               # [1, 12, 123, 1234, 12345] #12= y:1*10+x:2
2 chain(iterA, iterB, ...)                                           迭代物件串聯,形成一個更大迭代器 g=itertools.chain(['a', 'b', 'c'], (1, 2, 3))                                                  -->a, b, c, 1, 2, 3
3 chain.from_iterable(iterable )                    classmethod替代建構函式chain()  
4 combinations(iterable, r)                                       r數量元素排列組合:

g=itertools.combinations('ABCD', 2)                                                     --> AB AC AD BC BD CD

5 combinations_with_replacement(iterable,r )             r數量元素排列組合: g=itertools.combinations_with_replacement('ABC', 2)                              --> AA AB AC BB BC CC
6 compress(data, selectors)                                    根據條件(boolData=Ture)返回對應data的元素 g=itertools.compress([1,2,3,4,5], [True, True, False, False, True])              -->1, 2, 5
7 count(start=0, step=1)                                        無限迴圈數; g = itertools.count(10,2)                                                                       --> 10  12  14...
8 cycle(iter)                                                         物件重複迴圈 g = itertools.cycle('ABCD')                                                                  --> A B C D A B CD ...
9 dropwhile(predicate, iter)                                    根據第一個(func=false)選擇其後all元素 g = itertools.dropwhile(lambda x: x<5, [1,4,6,4,1])                                 --> 6 4 1
10 filterfalse(predicate, iter)                                     根據條件(func=false)選擇元素 g = itertools.filterfalse(lambda x: x%2, range(10))                                   --> 0 2 4 6 8
11 groupby(iter,key_func=None)                              根據條件(func)將資料分組 for key, group in itertools.groupby(                              'AaaBBbcCAAa',lambda c:c.upper() ):  print(key,list(group))                     #A['A', 'a', 'a'] B['B', 'B', 'b'] C['c', 'C'] A['A', 'A', 'a']
12 islice(iter, start=0, stop, step=1)                           類似切片,引數不能為負 g=itertools.islice(range(10), 2, 8, 2)                                                      -->2, 4, 6
13 permutations(iterable, r=None)                              r數量元素排列組合: g=itertools.permutations('ABCD', 2)                                                      --> AB AC AD BA BC BD CA CB CD DA DB DC
14 product(* iterables,repeat = 1 )                     笛卡爾乘積 g=itertools.product('ABCD', 'xy')                                                          --> Ax Ay Bx By Cx Cy Dx Dy
15 repeat(elem [,n])                                              無休止或最多n次 g = itertools.repeat(10, 3)                                                                   --> 10 10 10
16 starmap(func, iter)                                              根據條件(func)對映全部元素 g= itertools.starmap(lambda x: x * x, [1, 2, 3])                                         # g只是一個迭代物件
    for x in itertools.starmap( lambda x,y: x*y,zip([10, 20, 30], itertools.count(1)) ):print(x)  # 10 40 90
17

takewhile(predicate, iter)                                    根據條件(func=true)選擇元素

g=itertools.takewhile(lambda x: x<5, [1,4,6,4,1])                                    --> 1 4

18 tee(iter, n=2)                                                       返回n個獨立迭代器 g=itertools.tee( itertools.count() )                                                       =>iterA, iterB  # iterA -> 0, 1, 2, 3,  ...;iterB ->0, 1, 2, 3,…
19 zip_longest(* iterables,fillvalue = None )          迭代器聚合 g=itertools.zip_longest('ABCD', 'xy', fillvalue='-')                                    --> Ax By C- D-