Python标准库itertools的使用方法
Python标准库itertools模块介绍
itertools是python内置的模块,使用简单且功能强大,这里尝试汇总整理下,并提供简单应用示例;如果还不能满足你的要求,欢迎加入补充。
使用Python标准库itertools只需简单一句导入:importitertools
chain()
与其名称意义一样,给它一个列表如lists/tuples/iterables,链接在一起;返回iterables对象。
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'] foriteminlist(itertools.chain(letters,booleans)): print(item)
count()
生成无界限序列,count(start=0,step=1),示例从100开始,步长为2,循环10,打印对应值;必须手动break,count()会一直循环。
i=0 foriteminitertools.count(100,2): i+=1 ifi>10:break print(item)
filterfalse()
Pythonfilterfalse(contintion,data)迭代过滤条件为false的数据。如果条件为空,返回data中为false的项;
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(lambdax:x<20,numbers))) #输出:[23,20,44,32]
compress()
返回我们需要使用的元素,根据b集合中元素真值,返回a集中对应的元素。
print(list(itertools.compress(letters,booleans))) #['a','c','f']
starmap()
针对list中的每一项,调用函数功能。starmap(func,list[]);
starmap(pow,[(2,5),(3,2),(10,3)])-->3291000 >>>fromitertoolsimport* >>>x=starmap(max,[[5,14,5],[2,34,6],[3,5,2]]) >>>foriinx: >>>print(i) 14 34 5
repeat()
repeat(object[,times])重复times次;
repeat(10,3)-->101010
dropwhile()
dropwhile(func,seq);当函数f执行返回假时,开始迭代序列
dropwhile(lambdax:x<5,[1,4,6,4,1])-->641
takewhile()
takewhile(predicate,iterable);返回序列,当predicate为true是截止。
takewhile(lambdax:x<5,[1,4,6,4,1])-->14
islice()
islice(seq[,start],stop[,step]);返回序列seq的从start开始到stop结束的步长为step的元素的迭代器
foriinislice("abcdef",0,4,2):#a,c printi
product()
product(iter1,iter2,...iterN,[repeat=1]);创建一个迭代器,生成表示item1,item2等中的项目的笛卡尔积的元组,repeat是一个关键字参数,指定重复生成序列的次数
#product('ABCD','xy')-->AxAyBxByCxCyDxDy #product(range(2),repeat=3)-->000001010011100101110111 foriinproduct([1,2,3],[4,5],[6,7]): printi (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个元素做排列的元组的迭代器
foriinpermutations([1,2,3],3): printi (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:不带重复
foriincombinations([1,2,3],2): printi (1,2) (1,3) (2,3)
combinations_with_replacement()
同上,带重复例子:
foriincombinations_with_replacement([1,2,3],2): printi (1,1) (1,2) (1,3) (2,2) (2,3) (3,3)
应用示例
求质数序列中1,3,5,7,9,11,13,15三个数之和为35的三个数;
defget_three_data(data_list,amount): fordatainlist(itertools.combinations(data_list,3)): ifsum(data)==amount: print(data) #(7,13,15)
更多python标准库使用方法请点击下面的相关文章
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。