python 學習彙總26:itertools函式彙總簡表( tcy)
阿新 • • 發佈:2018-11-19
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- |