详解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 实现文件的递归拷贝实现代码
Aug 02 Python
Python列表(list)常用操作方法小结
Feb 02 Python
Python中subprocess的简单使用示例
Jul 28 Python
使用Python操作excel文件的实例代码
Oct 15 Python
NumPy.npy与pandas DataFrame的实例讲解
Jul 09 Python
在python中对变量判断是否为None的三种方法总结
Jan 23 Python
python数据预处理之数据标准化的几种处理方式
Jul 17 Python
Python SQLAlchemy入门教程(基本用法)
Nov 11 Python
Python3将jpg转为pdf文件的方法示例
Dec 13 Python
python数据库编程 ODBC方式实现通讯录
Mar 27 Python
python 读txt文件,按‘,’分割每行数据操作
Jul 05 Python
如何用Python进行时间序列分解和预测
Mar 01 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一些公用函数的集合
2008/03/27 PHP
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
浅谈javascript中的作用域
2012/04/07 Javascript
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
实例分析js事件循环机制
2017/12/13 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
跟老齐学Python之折腾一下目录
2014/10/24 Python
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
python爬虫解决验证码的思路及示例
2019/08/01 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
基于Python中的yield表达式介绍
2019/11/19 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
会计职业生涯规划范文
2014/01/04 职场文书
2014年实习生工作总结
2014/11/27 职场文书
值班管理制度范本
2015/08/06 职场文书