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- |