- count cycle repeat迭代内容
>>> import itertools >>> n = itertools.count(1) #从1开始增加的迭代 >>> for i in n: print(i) >>> n = itertools.cycle('ABCDE') #循环cycle参数的内容 >>> for i in n: print(i) >>> s = itertools.repeat('hello', 4) #重复4次参数内容 >>> for i in s: print(i)
- chain groupby
>>> for c in itertools.chain('ABC', '123'): #返回一个迭代器,元素以单一序列的形式 print(c) A B C 1 2 3 >>> for key, group in itertools.groupby('AAABB1C1CCAA'): print(key, list(group)) #将序列就近分组,相邻的相同字符为key,几个相同字符的迭代器为group,以list形式显示(没有形同重复字符则单个字符为一组) A ['A', 'A', 'A'] B ['B', 'B'] 1 ['1'] C ['C'] 1 ['1'] C ['C', 'C'] A ['A', 'A'] >>> for key, group in itertools.groupby('AaaBb1C1cCaA', lambda c:c.upper()): #参数2为可选参数,为keyfunc print(key, list(group)) #不区分大小写,全转为大写之后比较 A ['A', 'a', 'a'] B ['B', 'b'] 1 ['1'] C ['C'] 1 ['1'] C ['c', 'C'] A ['a', 'A']
- product 笛卡尔积 (组合——)
>>> a = (1, 2, 3) >>> b = ('A', 'B', 'C') >>> c = itertools.product(a, b) #几个变量就生成含几个元素的元组.... 将变量元素一一组合 >>> for i in c: #repeat可作为关键字参数,指定序列重复的次数 print(i) (1, 'A') (1, 'B') (1, 'C') (2, 'A') (2, 'B') (2, 'C') (3, 'A') (3, 'B') (3, 'C')
- permutations 其中序列元素的任意组合
>>> a = [1, 2, 3] >>> s = [i for i in itertools.permutations(a[, r])] #返回指定长度的序列 返回列表中任意取r个元素做排列的元组的迭代器 >>> s [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
>>> a = [1, 2, 3, 4] >>> s_number = [i[0] * 100 + i[1] * 10 + i[2] for i in itertools.permutations(a)] #选3个元素组合成不重复的3位数 >>> s_number [123, 124, 132, 134, 142, 143, 213, 214, 231, 234, 241, 243, 312, 314, 321, 324, 341, 342, 412, 413, 421, 423, 431, 432]
- combinations(iterable, r) 组合(子序列)
>>> s = [i for i in itertools.combinations(a, 3)] #返回序列中长度为r的子序列,顺序不变,不重复 >>> s [(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]