详解python itertools功能


Posted in Python onFebruary 07, 2020

介绍

      itertools是python内置的模块,使用简单且功能强大,这里尝试汇总整理下,并提供简单应用示例;如果还不能满足你的要求,欢迎加入补充。

      使用只需简单一句导入:import itertools

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']
 
  for item in list(itertools.chain(letters,booleans)):
    print(item)

count()

  生成无界限序列,count(start=0, step=1) ,示例从100开始,步长为2,循环10,打印对应值;必须手动break,count()会一直循环。

i = 0
  for item in itertools.count(100,2):
    i += 1
    if i > 10 : break
    
    print(item) 
 
filterfalse ()
   Python filterfalse(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(lambda x : 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)]) --> 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次;
repeat(10, 3) --> 10 10 10
dropwhile()
dropwhile(func, seq );当函数f执行返回假时, 开始迭代序列
dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1
takewhile()
takewhile(predicate, iterable);返回序列,当predicate为true是截止。
takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4
islice()
islice(seq[, start], stop[, step]);返回序列seq的从start开始到stop结束的步长为step的元素的迭代器
for i in islice("abcdef", 0, 4, 2):#a, c
  print i

product()

product(iter1,iter2, ... iterN, [repeat=1]);创建一个迭代器,生成表示item1,item2等中的项目的笛卡尔积的元组,repeat是一个关键字参数,指定重复生成序列的次数

   

# 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个元素做排列的元组的迭代器

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:不带重复

for i in combinations([1, 2, 3], 2):
  print i
(1, 2)
(1, 3)
(2, 3)
combinations_with_replacement()

同上, 带重复 例子:

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的三个数;

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)
#(9, 11, 15)

总结

以上所述是小编给大家介绍的python itertools功能,希望对大家有所帮助!

Python 相关文章推荐
Python  __getattr__与__setattr__使用方法
Sep 06 Python
Python使用urllib2模块实现断点续传下载的方法
Jun 17 Python
Python绘制的二项分布概率图示例
Aug 22 Python
对Pyhon实现静态变量全局变量的方法详解
Jan 11 Python
python 实现selenium断言和验证的方法
Feb 13 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
Python Flask框架模板操作实例分析
May 03 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
Nov 09 Python
python3处理word文档实例分析
Dec 01 Python
python中slice参数过长的处理方法及实例
Dec 15 Python
python实现进度条的多种实现
Apr 29 Python
Python开发五子棋小游戏
Apr 28 Python
Python中itertools的用法详解
Feb 07 #Python
Python转换itertools.chain对象为数组的方法
Feb 07 #Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 #Python
python十进制转二进制的详解
Feb 07 #Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 #Python
python实现ip地址的包含关系判断
Feb 07 #Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 #Python
You might like
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
用php实现让页面只能被百度gogole蜘蛛访问的方法
2009/12/29 PHP
Smarty中调用FCKeditor的方法
2014/10/27 PHP
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
PHP _construct()函数讲解
2019/02/03 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
让页面上两个div中的滚动条(滑块)同步运动示例
2013/08/07 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
JS常见算法详解
2017/02/28 Javascript
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
javascript中的replace函数(带注释demo)
2018/01/07 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
Python如何实现守护进程的方法示例
2017/02/08 Python
Python变量和数据类型详解
2017/02/15 Python
Python编写Windows Service服务程序
2018/01/04 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
python中p-value的实现方式
2019/12/16 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
2020/05/15 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
深入了解Python 变量作用域
2020/07/24 Python
2014年三万活动总结
2014/04/26 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
优秀大学生自荐信
2015/03/26 职场文书
中秋晚会致辞
2015/07/31 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
解决numpy数组互换两行及赋值的问题
2021/04/17 Python
Redis实现订单过期删除的方法步骤
2022/06/05 Redis