详解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使用MYSQLDB实现从数据库中导出XML文件的方法
May 11 Python
python中管道用法入门实例
Jun 04 Python
对Python3 goto 语句的使用方法详解
Feb 16 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
Python 窗体(tkinter)按钮 位置实例
Jun 13 Python
python读取并定位excel数据坐标系详解
Jun 26 Python
python pyenv多版本管理工具的使用
Dec 23 Python
keras处理欠拟合和过拟合的实例讲解
May 25 Python
Python configparser模块应用过程解析
Aug 14 Python
python 如何利用argparse解析命令行参数
Sep 11 Python
python smtplib发送多个email联系人的实现
Oct 09 Python
Python极值整数的边界探讨分析
Sep 15 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文件中是否含有bom的函数
2012/05/31 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
php并发加锁示例
2016/10/17 PHP
PHP中仿制 ecshop验证码实例
2017/01/06 PHP
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
Python二维码生成库qrcode安装和使用示例
2014/12/16 Python
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
Python中一些自然语言工具的使用的入门教程
2015/04/13 Python
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
Django--权限Permissions的例子
2019/08/28 Python
Pycharm小白级简单使用教程
2020/01/08 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
python语言是免费还是收费的?
2020/06/15 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
一些.net面试题
2014/10/06 面试题
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
超市活动计划书
2014/04/24 职场文书
初三英语教学计划
2015/01/23 职场文书
《春酒》教学反思
2016/02/22 职场文书
python用字节处理文件实例讲解
2021/04/13 Python
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL