itertools: 迭代器小工具


  Function

Infinite iterators

(无限迭代)

count() cycle() repeat()  

Combinatoric generators

(排列组合)

product() permutations() combinations()

combinations_with_replacement()

有限迭代 accumulate(p[, func]) chain(p, q, ...) chain.from_iterable([p, q, ...]) compress(data, selectors)
dropwhile(pred, seq) groupby(iterable[, keyfunc]) filterfalse(pred, seq) islice(seq, [start,] stop [, step])
starmap(fun, seq) tee(it, n=2) takewhile(pred, seq) zip_longest(p, q, ...)


itertools.tee(it, n=2)
复制独立的迭代器(默认复制两次)

1 import itertools
2 num = [1, 2, 3, 4]
3 for i, item in enumerate(itertools.tee(num, 3)):   # 3是指复制三次,默认为2次
4     print('第{}个迭代对象'.format(i))
5     for it in item:
6         print(it, end=' ')
7     print('')

 itertools.accumulate(iter[, func, initial])   对iter中对象进行指定函数的迭代运算

1 for item in itertools.accumulate(num):    # 默认迭代相加
2     print(item, end='  ')
3 print('')
4 for item in itertools.accumulate(num, func=operator.mul):   # 指定迭代函数
5     print(item, end='  ')
6 print('')
7 for item in itertools.accumulate(num, func=operator.mul, initial=2):  # 指定迭代初始值
8     print(item, end='  ')
9 print('')

itertools.chain ( *iterables ) # 一次性遍历多个迭代器

1 # itertools. chain ( *iterables )
2 for item in itertools.chain(itertools.tee(num, 3)):
3     for i in item:
4         print(i, end='  ')
5 print(''

itertools.chain.from_iterable ( *iterables ) # 一次性遍历多个迭代器

1 # itertools. chain.from_iterable ( *iterables )
2 for item in itertools.chain.from_iterable(itertools.tee(num, 3)):
3     print(item, end='  ')
4 print('')

itertools. combinations ( iterable, r )     # 组合,从iterable对象中抽取r个对象的所有情况

1 # itertools. combinations ( iterable, r )
2 for item in itertools.combinations (num, 3):
3     print(item, end='  ')
4 print('')

itertools.combinations_with_replacement( iterable, r )     # 组合,从iterable对象中抽取r个对象的所有情况

抽取r次,每次随机抽取,会出现重复对象,适合独立重复试验

1 # itertools. combinations_with_replacement ( iterable, r )
2 for item in itertools.combinations_with_replacement(num, 2):
3     print(item, end='  ')
4 print('')

itertools.compress(data, selectors)   返回selectors中计算结果为True的相应位置中的data数据

1 # itertools.compress ( data, selectors )
2 for item in itertools.compress('ABCDEF', [1, 0, 1, 0, 1, 1]):
3     print(item, end=' ')
4 print()

itertools.count( start = 0, step = 1 )   从0开始,生成步长为1的无限序列

1 # itertools. count ( start=0, step=1 )
2 for item in itertools.count(start=3, step=3):
3     print(item, end='  ')
4     if item > 20:
5         break
6 print('')

itertools.cycle(iterable)   对iterable对象中的元素进行无限循环

1 # itertools. cycle ( iterable )
2 for item in itertools.cycle(num):
3     print(item, end=' ')
4 print()

 itertools.dropwhile(predicate, iterable)  遍历iterable,删除满足predicate条件的元素,直到出现不满足条件的元素,输出剩余元素

1 # itertools. dropwhile ( predicate, iterable )
2 for item in itertools.dropwhile(lambda x: x < 5, [1, 4, 6, 3, 0]):
3     print(item, end=' ')
4 print()

itertools.filterfalse ( predicate, iterable )  遍历iterable,返回满足predicate条件的为False的所有元素

1 # itertools.filterfalse ( predicate, iterable )
2 for item in itertools.filterfalse(lambda x: x % 2, range(10)):
3     print(item, end=' ')
4 print()

itertools. groupby ( iterable, key=None ) 对iterable做分组处理,但是该处分组不同于sql中,连续输入同一个字符算作一组,重新打断输入则为另外一组

1 # itertools. groupby ( iterable, key=None )
2 for k, g in itertools.groupby('AAAABBBCCDAABBB'):
3     print(k, list(g))
4 for k, g in itertools.groupby('AAAABBBCCDAABBB', key=lambda x: x == 'A'):
5     print(k, list(g))

                                 

itertools.islice( iterable, start, stop [, step ] )  对literable进行切片处理

itertools.islice ( iterable, stop )

 1 # itertools.islice ( iterable, stop )
 2 # itertools.islice ( iterable, start, stop [, step ] )
 3 for item in itertools.islice('ABCDEFG', 2):
 4     print(item, end=' ')
 5 print('')
 6 for item in itertools.islice('ABCDEFG', 2, 4):
 7     print(item, end=' ')
 8 print('')
 9 for item in itertools.islice('ABCDEFG', 2, None, 2):
10     print(item, end=' ')
11 print('')

itertools.permutations(iterable, r=None)   排列,抽取r个iterable对象进行排列,当r=None时,对所有元素进行排列

1 # itertools. permutations ( iterable, r=None )
2 for item in itertools.permutations('ABC', 2):
3     print(item, end=' ')
4 print('')

itertools.product(*iterable, repeat=1)    计算笛卡尔积,repeat为iterable所有对象的重复次数

1 # itertools. product ( *iterables, repeat=1 )
2 for item in itertools.product('AB', 'xy', repeat=2):
3     print(item)
4 print('')

# itertools. repeat ( object [, times ] )
repeat(10, 3) --> 10 10 10

# itertools. starmap ( function, iterable )
starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000

# itertools. takewhile ( predicate, iterable ) 遇到不满足条件的即停止运行
takewhile(lambda x: x<5, [1,4,6,3,5]) --> 1 4

# itertools. zip_longest ( *iterables, fillvalue=None )
zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-

 

原文地址:https://www.cnblogs.com/jpapplication/p/15743340.html