详解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读取注册表中值的方法
Apr 08 Python
Linux下用Python脚本监控目录变化代码分享
May 21 Python
浅析AST抽象语法树及Python代码实现
Jun 06 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
Feb 26 Python
TensorFlow实现非线性支持向量机的实现方法
Apr 28 Python
对python3 urllib包与http包的使用详解
May 10 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
May 16 Python
python读取图片的几种方式及图像宽和高的存储顺序
Feb 11 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 Python
python golang中grpc 使用示例代码详解
Jun 03 Python
解决keras加入lambda层时shape的问题
Jun 11 Python
对PyTorch中inplace字段的全面理解
May 22 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
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
小程序自定义日历效果
2018/12/29 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python基于queue和threading实现多线程下载实例
2014/10/08 Python
python读写ini配置文件方法实例分析
2015/06/30 Python
Python的Django框架中if标签的相关使用
2015/07/15 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
2018/03/15 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
2019/10/14 Python
python集合的新增元素方法整理
2020/12/07 Python
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
2014年圣诞节倒计时网页的制作过程
2014/12/05 HTML / CSS
会计电算化大学生职业规划书
2014/02/05 职场文书
竞选部长演讲稿
2014/04/26 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
质量主管工作职责
2014/09/26 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
2015年大学生工作总结
2015/04/21 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
《日月潭》教学反思
2016/02/20 职场文书
市直属机关2016年主题党日活动总结
2016/04/05 职场文书
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript