详解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中使用Mako模版库的简单教程
Apr 08 Python
Python 的内置字符串方法小结
Mar 15 Python
Python缩进和冒号详解
Jun 01 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
Apr 05 Python
对python .txt文件读取及数据处理方法总结
Apr 23 Python
python实现C4.5决策树算法
Aug 29 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
Nov 06 Python
python 获取等间隔的数组实例
Jul 04 Python
Pytorch自己加载单通道图片用作数据集训练的实例
Jan 18 Python
Python文件操作方法详解
Feb 09 Python
python Tornado框架的使用示例
Oct 19 Python
利用Python将list列表写入文件并读取的方法汇总
Mar 25 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设计模式  Command(命令模式)
2011/06/17 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
php生成动态验证码gif图片
2015/10/19 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
javascript引导程序
2008/10/26 Javascript
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
2016/07/07 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
JavaScript实现自定义媒体播放器方法介绍
2017/01/03 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
关于vue.js组件数据流的问题
2017/07/26 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
python3 配置logging日志类的操作
2020/04/08 Python
python的flask框架难学吗
2020/07/31 Python
深入了解canvas在移动端绘制模糊的问题解决
2019/04/30 HTML / CSS
美国性感女装网站:bebe
2017/03/04 全球购物
应届生服装设计自我评价
2013/09/20 职场文书
医药专业推荐信
2013/11/15 职场文书
质检员岗位职责
2013/12/17 职场文书
园林技术个人的自我评价
2014/01/08 职场文书
八年级美术教学反思
2014/02/02 职场文书
2014道德模范事迹材料
2014/02/16 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
2014年学生管理工作总结
2014/12/20 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
Python机器学习之基础概述
2021/05/19 Python
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB