1、介绍
itertools 是python的迭代器模块,itertools提供的工具相当高效且节省内存。
使用这些工具,你将能够创建自己定制的迭代器用于高效率的循环。
- 无限迭代器
 itertools包自带了三个可以无限迭代的迭代器。这意味着,当你使用他们时,你要知道要的到底是最终会停止的迭代器,还是需要无限地迭代鞋去。
(1)count(初值=0, 步长=1):count 迭代器会返回从传入的起始参数开始的均匀间隔的数值。count 也可以接收指定的步长参数。我们来看一个简单的例子:

 from itertools import count
for i in count():
print i
if i > 10:
break #从0开始循环
0
1
2
3
4
5
6
7
8
9
10
11

(2)islice(count(10), 5):从 10 开始,输出 5 个元素后结束。islice 的第二个参数控制何时停止迭代。但其含义并不是”达到数字 5 时停止“,而是”当迭代了 5 次之后停止“。

 from itertools import count,islice
for i in islice(count(10),5):
print i #从10开始循环迭代5次后退出循环
10
11
12
13
14

(3)cycle:这里我们创建了一个 for 循环,使其在三个字母 XYZ 间无限循环。当然,我们并不真地想要永远循环下去,所以我们添加了一个简单的计数器来跳出循环。

 from itertools import cycle
count = 0
for item in cycle('XYZ'):
if count > 7:
break
print item
count = count + 1 #在xyz之间无限循环
X
Y
Z
X
Y
Z
X

(4)accumulate(可迭代对象[, 函数])(适用于python3)
   accumulate 迭代器将返回累计求和结果,或者传入两个参数的话,由传入的函数累积计算的结果。默认设定为相加

  这里,我们 导入了 accumulate,然后传入 10 个数字,0-9。迭代器将传入数字依次累加,所以第一个是 0 ,第二个是 0+1, 第三个是 1+2,如此下去。

  现在我们导入 operator 模块,然后添加进去:

 >>> from itertools import accumulate
>>> list(accumulate(range(10)))
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45]

  这里我们传入了数字 1-4 到 accumulate 迭代器中。我们还传入了一个函数:operator.mul,这个函数将接收的参数相乘。

  所以每一次迭代,迭代器将以乘法代替除法(1×1=1, 1×2=2, 2×3=6, 以此类推)

 from itertools import accumulate
import operator
>>> list(accumulate(range(1, 6), operator.mul))
[1, 2, 6, 24, 120]

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

 from itertools import chain
for c in chain(['a','b','cd'],['ef',123],'XYZ'):
print c #输出
a
b
cd
ef
123
X
Y
Z #备注类似于多个list叠加
mm = ['a','b','cd'] + ['ef',123] + ['X','Y','Z']

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

 from itertools import groupby

 for key, group in groupby('AAABBBCCAAA'):
print key,list(group) #输出
A ['A', 'A', 'A']
B ['B', 'B', 'B']
C ['C', 'C']
A ['A', 'A', 'A']

python itertools 用法的更多相关文章

  1. Python高级用法总结

    Python很棒,它有很多高级用法值得细细思索,学习使用.本文将根据日常使用,总结介绍Python的一组高级特性,包括:列表推导式.迭代器和生成器.装饰器. 列表推导(list comprehensi ...

  2. python argparse用法总结

    转:python argparse用法总结 1. argparse介绍 argparse是python的一个命令行解析包,非常适合用来编写可读性非常好的程序. 2. 基本用法 prog.py是我在li ...

  3. Anaconda下载及安装及查看安装的Python库用法

    Anaconda下载及安装及查看安装的Python库用法 Anaconda 是一个用于科学计算的 Python 发行版,提供了包管理与环境管理的功能.Anaconda 利用 conda 来进行 pac ...

  4. python enumerate用法总结【转】

    enumerate()说明 enumerate()是python的内置函数 enumerate在字典上是枚举.列举的意思 对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enum ...

  5. Python高级用法

    Python高级用法 三元表达式 x = 10 y = 20 print(x if x > y else y) x = 100 y = 20 print(x if x > y else y ...

  6. Python import用法以及与from...import的区别

    Python import用法以及与from...import的区别 在python用import或者from...import来导入相应的模块.模块其实就是一些函数和类的集合文件,它能实现一些相应的 ...

  7. 预备知识-python核心用法常用数据分析库(上)

    1.预备知识-python核心用法常用数据分析库(上) 目录 1.预备知识-python核心用法常用数据分析库(上) 概述 实验环境 任务一:环境安装与配置 [实验目标] [实验步骤] 任务二:Pan ...

  8. python, itertools模块

    通过itertools模块,可以用各种方式对数据进行循环操作 1, chain() from intertools import chain for i in chain([1,2,3], ('a', ...

  9. python itertools模块练习

    参考 <python标准库> 也可以参考Vamei博客 列表用着很舒服,但迭代器不需要将所有数据同时存储在内存中. 本章练习一下python 标准库中itertools模块 合并 和 分解 ...

随机推荐

  1. luogu P4014 分配问题

    简单的费用流问题,每个人对每个任务连边,每个任务对汇点连,源点对每个人连,最大费用取反即可 #include<bits/stdc++.h> using namespace std; #de ...

  2. golang自定义error

    系统自身的error处理一般是 errors.New()或fmt.Errorf()等,对一些需要复杂显示的,不太友好,我们可以扩展下error. error在标准库中被定义为一个接口类型,该接口只有一 ...

  3. 无线冲方案 MCU vs SoC

    参考: MCU还是SoC:2018无线充电技术走向何方? 方案 分立/集成 特点 框图 MCU方案 分立方案 MCU芯片负责Qi协议的运算和外围电路控制,ST MCU居多:单线圈,双线圈,三线圈都有: ...

  4. php中读取大文件实现方法详解

    php中读取大文件实现方法详解 来源:   时间:2013-09-05 19:27:01   阅读数:6186 分享到:0 [导读] 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解 ...

  5. 启动易EZB Systems EasyBoot V6.5.1.669 + 注册码

    启动易EasyBoot可以简单的让您制作启动光盘,它可以制作光盘启动菜单.自动生成启动文件.并生成可启动ISO文件.只要通过CD-R/W刻录软件即可制作完全属于自己的启动光盘. EasyBoot 6. ...

  6. 《精通iOS开发》书籍目录

    1.欢迎来到iOS和Swift世界 2.创建一个新项目 3.实现基本交互 4.更丰富的用户界面 5.自动旋转和自动调整大小 6.多视图应用 7.分页栏与选取器 8.表视图简介 9.导航控制器和表视图 ...

  7. java并发队列

    阻塞队列 常见的阻塞队列有ArrayBlockingQueue,LinkedBlockingDeque,LinkedBlockingQueue,这些队列有界且可以阻塞线程 ArrayBlockingQ ...

  8. 使用switch编写一个购物管理系统

    在编写过程中,可能没有做到语句的精简,这个是需要解决的事. package nzcc4; import java.util.Scanner; public class Shopmain { publi ...

  9. 087、Java数组之对象数组的静态初始化

    01.代码如下: package TIANPAN; class Book { private String title; private double price; public Book(Strin ...

  10. 自定义工具'MSDiscocodeGenerator’失败。未能检索当前项目。

    问题描述: 引用webservice时不出错,但更新是出现错误 “自定义工具'MSDiscocodeGenerator’失败.未能检索当前项目.” 解决办法: 打开控制面板修复.NET 3.5SP1, ...