详解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模块学习 re 正则表达式
May 19 Python
python中使用mysql数据库详细介绍
Mar 27 Python
python实现数独算法实例
Jun 09 Python
使用Python进行二进制文件读写的简单方法(推荐)
Sep 12 Python
python3实现ftp服务功能(客户端)
Mar 24 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
python图形工具turtle绘制国际象棋棋盘
May 23 Python
django 快速启动数据库客户端程序的方法示例
Aug 16 Python
Python作用域与名字空间原理详解
Mar 21 Python
如何在python中处理配置文件代码实例
Sep 27 Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 Python
python中zip()函数遍历多个列表方法
Feb 18 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模板引擎Smarty内建函数foreach,foreachelse用法分析
2016/04/11 PHP
CodeIgniter框架常见用法工作总结
2017/03/16 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
Javascript valueOf 使用方法
2008/12/28 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
Weex开发之地图篇的具体使用
2019/10/16 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
2020/08/13 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
python之yield表达式学习
2014/09/02 Python
python模块之StringIO使用示例
2015/04/08 Python
python实现人脸识别代码
2017/11/08 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
python爬虫工具例举说明
2020/11/30 Python
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
美国性感内衣店:Yandy
2018/06/12 全球购物
班组长工作职责
2013/12/25 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
推荐信模板
2014/05/09 职场文书
学生逃课检讨书
2015/02/17 职场文书
质量保证书怎么写
2015/02/27 职场文书
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL