详解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同时兼容python2和python3的8个技巧分享
Jul 11 Python
python和shell监控linux服务器的详细代码
Jun 22 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
基于python的ini配置文件操作工具类
Apr 24 Python
python 随机生成10位数密码的实现代码
Jun 27 Python
Python3视频转字符动画的实例代码
Aug 29 Python
postman传递当前时间戳实例详解
Sep 14 Python
Python函数的默认参数设计示例详解
Dec 01 Python
opencv3/python 鼠标响应操作详解
Dec 11 Python
Django 404、500页面全局配置知识点详解
Mar 10 Python
python框架flask入门之路由及简单实现方法
Jun 07 Python
python设置中文界面实例方法
Oct 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
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
PHP 面向对象详解
2012/09/13 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
学习ExtJS Window常用方法
2009/10/07 Javascript
jquery 弹出层实现代码
2009/10/30 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
JavaScript简单判断复选框是否选中及取出值的方法
2015/08/13 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
python中zip和unzip数据的方法
2015/05/27 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
Django模板Templates使用方法详解
2019/07/19 Python
Python爬虫 urllib2的使用方法详解
2019/09/23 Python
python ETL工具 pyetl
2020/06/07 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
介绍一些UNIX常用简单命令
2014/11/11 面试题
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
2015届大学生就业推荐表自我评价
2014/09/27 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
杭白菊导游词
2015/02/10 职场文书
异地恋情人节寄语
2015/02/28 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
Python进度条的使用
2021/05/17 Python