Python标准库itertools模块介绍
itertools是python内置的模块,使用简单且功能强大,这里尝试汇总整理下,并提供简单应用示例;如果还不能满足你的要求,欢迎加入补充。
使用Python标准库itertools只需简单一句导入:import itertools
chain()
与其名称意义一样,给它一个列表如 lists/tuples/iterables,链接在一起;返回iterables对象。
1
2
3
4
5
6
7
8
9
10
11
12
|
letters = [ 'a' , 'b' , 'c' , 'd' , 'e' , 'f' ] booleans = [ 1 , 0 , 1 , 0 , 0 , 1 ] print ( list (itertools.chain(letters,booleans))) #输出:['a', 'b', 'c', 'd', 'e', 'f', 1, 0, 1, 0, 0, 1] print ( tuple (itertools.chain(letters,letters[ 3 :]))) #输出('a', 'b', 'c', 'd', 'e', 'f', 'd', 'e', 'f') print ( set (itertools.chain(letters,letters[ 3 :]))) #输出:{'a', 'd', 'b', 'e', 'c', 'f'} print ( list (itertools.chain(letters,letters[ 3 :]))) #输出:['a', 'b', 'c', 'd', 'e', 'f', 'd', 'e', 'f'] for item in list (itertools.chain(letters,booleans)): print (item) |
count()
生成无界限序列,count(start=0, step=1) ,示例从100开始,步长为2,循环10,打印对应值;必须手动break,count()会一直循环。
1
2
3
4
5
6
|
i = 0 for item in itertools.count( 100 , 2 ): i + = 1 if i > 10 : break print (item) <br> |
filterfalse()
Python filterfalse(contintion,data) 迭代过滤条件为false的数据。如果条件为空,返回data中为false的项;
1
2
3
4
5
6
|
booleans = [ 1 , 0 , 1 , 0 , 0 , 1 ] numbers = [ 23 , 20 , 44 , 32 , 7 , 12 ] print ( list (itertools.filterfalse( None ,booleans))) #输出:[0, 0, 0] print ( list (itertools.filterfalse( lambda x : x < 20 ,numbers))) #输出:[23, 20, 44, 32] |
compress()
返回我们需要使用的元素,根据b集合中元素真值,返回a集中对应的元素。
1
2
|
print ( list (itertools.compress(letters,booleans))) # ['a', 'c', 'f'] |
starmap()
针对list中的每一项,调用函数功能。starmap(func,list[]) ;
1
2
3
4
5
6
7
8
|
starmap( pow , [( 2 , 5 ), ( 3 , 2 ), ( 10 , 3 )]) - - > 32 9 1000 >>> from itertools import * >>> x = starmap( max ,[[ 5 , 14 , 5 ],[ 2 , 34 , 6 ],[ 3 , 5 , 2 ]]) >>> for i in x: >>> print (i) 14 34 5 |
repeat()
repeat(object[, times]) 重复times次;
1
|
repeat( 10 , 3 ) - - > 10 10 10 |
dropwhile()
dropwhile(func, seq );当函数f执行返回假时, 开始迭代序列
1
|
dropwhile( lambda x: x< 5 , [ 1 , 4 , 6 , 4 , 1 ]) - - > 6 4 1 |
takewhile()
takewhile(predicate, iterable);返回序列,当predicate为true是截止。
1
|
takewhile( lambda x: x< 5 , [ 1 , 4 , 6 , 4 , 1 ]) - - > 1 4 |
islice()
islice(seq[, start], stop[, step]);返回序列seq的从start开始到stop结束的步长为step的元素的迭代器
1
2
|
for i in islice( "abcdef" , 0 , 4 , 2 ): #a, c print i |
product()
product(iter1,iter2, ... iterN, [repeat=1]);创建一个迭代器,生成表示item1,item2等中的项目的笛卡尔积的元组,repeat是一个关键字参数,指定重复生成序列的次数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111 for i in product([ 1 , 2 , 3 ], [ 4 , 5 ], [ 6 , 7 ]): print i ( 1 , 4 , 6 ) ( 1 , 4 , 7 ) ( 1 , 5 , 6 ) ( 1 , 5 , 7 ) ( 2 , 4 , 6 ) ( 2 , 4 , 7 ) ( 2 , 5 , 6 ) ( 2 , 5 , 7 ) ( 3 , 4 , 6 ) ( 3 , 4 , 7 ) ( 3 , 5 , 6 ) ( 3 , 5 , 7 ) |
permutations()
permutations(p[,r]);返回p中任意取r个元素做排列的元组的迭代器
1
2
3
4
5
6
7
8
|
for i in permutations([ 1 , 2 , 3 ], 3 ): print i ( 1 , 2 , 3 ) ( 1 , 3 , 2 ) ( 2 , 1 , 3 ) ( 2 , 3 , 1 ) ( 3 , 1 , 2 ) ( 3 , 2 , 1 ) |
combinations()
combinations(iterable,r);创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序
note:不带重复
1
2
3
4
5
|
for i in combinations([ 1 , 2 , 3 ], 2 ): print i ( 1 , 2 ) ( 1 , 3 ) ( 2 , 3 ) |
combinations_with_replacement()
同上, 带重复 例子:
1
2
3
4
5
6
7
8
|
for i in combinations_with_replacement([ 1 , 2 , 3 ], 2 ): print i ( 1 , 1 ) ( 1 , 2 ) ( 1 , 3 ) ( 2 , 2 ) ( 2 , 3 ) ( 3 , 3 ) |
应用示例
求质数序列中1,3,5,7,9,11,13,15三个数之和为35的三个数;
1
2
3
4
5
|
def get_three_data(data_list,amount): for data in list (itertools.combinations(data_list, 3 )): if sum (data) = = amount: print (data) #(7, 13, 15) |
更多python标准库使用方法请点击下面的相关文章
原文链接:https://www.cnblogs.com/volcao/p/8758758.html