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-

猜你喜欢

转载自blog.csdn.net/tcy23456/article/details/84075918