详解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 相关文章推荐
详细介绍Ruby中的正则表达式
Apr 10 Python
使用python加密自己的密码
Aug 04 Python
Python抓取手机号归属地信息示例代码
Nov 28 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
Numpy 将二维图像矩阵转换为一维向量的方法
Jun 05 Python
PyQt4实时显示文本内容GUI的示例
Jun 14 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
Jul 08 Python
使用PyQt5实现图片查看器的示例代码
Apr 21 Python
python模拟点击玩游戏的实例讲解
Nov 26 Python
python 获取域名到期时间的方法步骤
Feb 10 Python
pytorch训练神经网络爆内存的解决方案
May 22 Python
python办公自动化之excel的操作
May 23 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异步执行的常用方式详解
2013/06/03 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
微信小程序使用checkbox显示多项选择框功能【附源码下载】
2017/12/11 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
2018/10/10 Javascript
JS实现小星星特效
2019/12/24 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
解决python3中自定义wsgi函数,make_server函数报错的问题
2017/11/21 Python
Python将图片转换为字符画的方法
2020/06/16 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
Python Web版语音合成实例详解
2019/07/16 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
python学习笔记之多进程
2020/08/06 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
配置H5的滚动条样式的示例代码
2018/03/09 HTML / CSS
小学生环保标语
2014/06/13 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书
继承权公证书范本
2015/01/23 职场文书
质量保证书怎么写
2015/02/27 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
日本官方排名前10的动漫,名侦探柯南上榜,第一是一部创造历史的动漫
2022/03/18 日漫
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android