Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数。

首先,我们看看itertools提供的几个“无限”迭代器:

 import itertools
 natuals = itertools.count(1)
 for n in natuals: print(n) 1 2 3 ... 

因为count()会创建一个无限的迭代器,所以上述代码会打印出自然数序列,根本停不下来,只能按Ctrl+C退出。

cycle()会把传入的一个序列无限重复下去:

 import itertools
 cs = itertools.cycle('ABC') # 注意字符串也是序列的一种  for c in cs:  print(c) 'A' 'B' 'C' 'A' 'B' 'C' ... 

同样停不下来。

repeat()负责把一个元素无限重复下去,不过如果提供第二个参数就可以限定重复次数:

 ns = itertools.repeat('A', 3)
 for n in ns:  print(n) ... A A A 

无限序列只有在for迭代时才会无限地迭代下去,如果只是创建了一个迭代对象,它不会事先把无限个元素生成出来,事实上也不可能在内存中创建无限多个元素。

无限序列虽然可以无限迭代下去,但是通常我们会通过takewhile()等函数根据条件判断来截取出一个有限的序列:

 natuals = itertools.count(1)
 ns = itertools.takewhile(lambda x: x <= 10, natuals)  list(ns) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

itertools提供的几个迭代器操作函数更加有用:

chain()

chain()可以把一组迭代对象串联起来,形成一个更大的迭代器:

 for c in itertools.chain('ABC', 'XYZ'):  print(c) # 迭代效果:'A' 'B' 'C' 'X' 'Y' 'Z' 

groupby()

groupby()把迭代器中相邻的重复元素挑出来放在一起:

 for key, group in itertools.groupby('AAABBBCCAAA'):
 print(key, list(group)) . A ['A', 'A', 'A'] B ['B', 'B', 'B'] C ['C', 'C'] A ['A', 'A', 'A'] 

实际上挑选规则是通过函数完成的,只要作用于函数的两个元素返回的值相等,这两个元素就被认为是在一组的,而函数返回值作为组的key。如果我们要忽略大小写分组,就可以让元素'A''a'都返回相同的key:

 for key, group in itertools.groupby('AaaBBbcCAAa', lambda c: c.upper()):  print(key, list(group)) ... A ['A', 'a', 'a'] B ['B', 'B', 'b'] C ['c', 'C'] A ['A', 'A', 'a']

转载于:https://www.cnblogs.com/bruce0425/p/8277746.html

Python的内建模块itertools相关推荐

  1. 四十六 常用内建模块 itertools

    Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertools提供的几个"无限"迭代器: >>> import ...

  2. Python常用内建模块(内含实例)

    文章目录 datetime 获取当前日期和时间 获取指定日期和时间 datetime转化为timestamp timestamp转化为datetime str转化为datetime datetime转 ...

  3. Python中内建模块collections常见用法总结

    1.Counter Counter是字典对象的一个子类.Counter()函数是collections模块中的函数,它接收一个可迭代对象,例如list.tuple等,返回一个Counter字典.返回C ...

  4. Python常用内建模块——学习笔记

    1.datetime:Python处理日期和时间的标准库 引入方法: from datetime import datetime. 第一个datetime是模块,第二个datetime是类. 如果仅导 ...

  5. python【数据结构与算法】内建模块itertools(操作迭代对象)

    文章目录 1 permutations方法 2 combination方法 3 总结 1 permutations方法 >>> s=[1,2,3] >>> impo ...

  6. python自带intertool模块找不到_介绍Python中内置的itertools模块

    Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertools提供的几个"无限"迭代器: >>> import ...

  7. Python学习笔记:常用内建模块4:hmac

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  8. Python3 内建模块 hashlib、itertools、HTMLParser、urllib

    Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制 ...

  9. python的标准类型内建模块有_python的常用内建模块与常用第三方模块

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一.常用内置模块 1.datetime Python 提供了一个 time 和 calendar 模 ...

最新文章

  1. Android_CodeWiki_01
  2. linux成长笔录——week_1
  3. tp3.2.3实现后台的顶部栏目查询,不用拼接sql
  4. MySQL数据库常见面试题总结
  5. 上大学后男生的两种变化
  6. 演练 网站的导航栏 0920
  7. 寻找素数分配线程算法
  8. python tkinter计算器实例_Python+tkinter使用80行代码实现一个计算器实例
  9. XStream---Java对象和XML之间的转换器
  10. 控制理论导论_生活 amp; 工作 amp; 科研 amp; 控制理论与实践
  11. revit二次开发概念_Revit二次开发教程:BIM自学入门Revit二次开发
  12. linux改d5000默认路径,linux相关指令和d5000基础操作.pdf
  13. java中23%5_23.5 jumpserver介绍
  14. Python爬虫爬取中国大学慕课MOOC课程的课程评价信息(讨论信息),采用selenium动态爬取方法
  15. 故事板(Storyboard)
  16. java——API——ArrayList集合
  17. Data Analysis - Day9 - Numpy Functions
  18. Elasticsearch高级操作 (关键字精确查询)
  19. Webstorm提示This license K71U8DBPNE has been cancelled
  20. 图像处理之直方图均衡化

热门文章

  1. CC攻击(N个免费代理形成的DDOS)
  2. 从零开始学PowerShell(9)创建PowerShell对象
  3. JS 查看标签下某元素所有信息(查看元素,查询元素,遍历元素、HTMLCollection对象、NodeList对象)
  4. Python内置函数——__import__ 的使用方法
  5. python-nmap使用及案例
  6. N - Dragon Balls(并查集+深度的意义
  7. elipse安装php
  8. install maven3 on ubuntu
  9. CV 里程计、推算定位与视觉里程计 简介
  10. 大龄程序员想转产品经理?3本书给你最靠谱的进阶攻略