详解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中的闭包用法实例详解
May 05 Python
python 换位密码算法的实例详解
Jul 19 Python
python进行两个表格对比的方法
Jun 27 Python
浅谈Pycharm中的Python Console与Terminal
Jan 17 Python
Python3.6中Twisted模块安装的问题与解决
Apr 15 Python
python 字符串常用方法汇总详解
Sep 16 Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 Python
Python Selenium实现无可视化界面过程解析
Aug 25 Python
Python操作word文档插入图片和表格的实例演示
Oct 25 Python
Python Selenium异常处理的实例分析
Feb 28 Python
详解用Python把PDF转为Word方法总结
Apr 27 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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
php 中include()与require()的对比
2006/10/09 PHP
PHP过滤★等特殊符号的正则
2014/01/27 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
JavaScript+CSS相册特效实例代码
2017/09/07 Javascript
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
学python爬虫能做什么
2020/07/29 Python
基于Python爬取51cto博客页面信息过程解析
2020/08/25 Python
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
Senreve官网:美国旧金山的奢侈手袋品牌
2019/03/21 全球购物
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
物理系毕业生自荐信
2013/11/01 职场文书
旅游市场营销方案
2014/03/09 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
暑期家教宣传单
2015/07/14 职场文书
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers