这篇是看wklken的《Python进阶-Itertools模块小结》 学习itertools模块的学习笔记

在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较费劲。。。

1、itertools.count(start=0,step=1)

此函数用来创建一个迭代器,生成从n开始的连续整数,如果忽略n,则从0开始计算

  如果超出了sys.maxint,计数器将溢出并继续行-sys.maxint-1开始计算

  定义:

def count(start=0, step=1):
#count(10) --> 10, 11, 12, 13.....
# count(2.5, 0.5)--> 2.5, 3.0, 3.5 ....
n = start
while True:
yield n
n += step

  使用:

from itertools import *

for i in izip(count(i), ['a', 'b', 'c']):
print i out:
(1, 'a')
(2, 'b')
(3, 'c')

2、itertools.cycle(iterable)

  创建一个迭代器,对iterable中的元素反复执行循环操作,内部会生成iterable中的元素的一个副本, 次副本用于返回循环中的重复项

  定义:

def cycle(iterable):
# cycle('ABCD') --> A B C D A B C D ....
saved = []
for element in iterable:
yield element
saved.append(element)
while saved:
for element in saved:
yield element

  使用:

from itertools import *

i = 0
for item in cycle(['a', 'b', 'c']):
i += 1
if i == 6:
break
print (i, item) out:
(1, 'a')
(2, 'b')
(3, 'c')
(4, 'a')
(5, 'b')

3、itertools.repeat(object[, times])

  创建一个迭代器,重复生成object, times (如果已提供) 指定重复计数, 如果未提供times, 将无尽返回该对象

  定义:

def repeat(object, times=None):
# repeat(10, 3) --> 10, 10, 10
if times is None:
while True:
yield object
else:
for i in xrange(time):
yield object

  使用:

from itertools import *

for i in repeat('over-and-over', 3):
print i out:
over-and-over
over-and-over
over-and-over

4、itertools.chain(*iterables)

  将多个迭代器作为参数,但只返回单个迭代器,它产生所有参数迭代器的内容,就好像他们来自于一个单一的序列。

  定义:

def chain(*iterables):
# chain('ABC', 'DEF') --> A B C D E F
for it in iterables:
for element in it:
yield element

  使用:

from itertools import *

for i in chain([1, 2, 3], ['a', 'b', 'c']):
print i out:
1
2
3
a
b
c

5、itertools.compress(data, selectors)

提供一个选择列表, 对原始数据进行筛选

定义:

def compress(data, selectors):
# compress('ABCDEF', [1, 0, 1, 0, 1, 1]) --> A C E F
return (d for d, s in izip(data, selectors) if s)

6、itertools.product(*iterables[, repeat])

笛卡尔积

创建一个迭代器,生成item1, item2等中的项目的笛卡尔积的元组, repeat是一个关键字参数,指定重复生成序列的次数。

def product(*args, **kwds):
# product('ABCD', 'xy') --> Ax, Ay, Bx, By, Cx, Cy, Dx, Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = map(tuple, args) * kwds.get(repeat, 1)
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
import itertools
a = (1, 2, 3)
b = ('a', 'b', 'c')
c = itertools.product(a, b)
for elem in c:
print elem out:
(1, 'A')
(2, 'B')
(3, 'C')
(2, 'A')
(2, 'B')
(2, 'C')
(3, 'A')
(3, 'B')
(3, 'C')

这个模块函数有好多,有好多敲了一遍忘了保存,懒得再敲了,但也记得差不多了,所以就这样吧

Python学习笔记—itertools模块的更多相关文章

  1. Python学习笔记之模块与包

    一.模块 1.模块的概念 模块这一概念很大程度上是为了解决代码的可重用性而出现的,其实这一概念并没有多复杂,简单来说不过是一个后缀为 .py 的 Python 文件而已 例如,我在某个工作中经常需要打 ...

  2. python学习笔记_week5_模块

    模块 一.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能), 本质就是.py结尾的python文件(文件名:test.py,对应模块名:test) 包:用来从逻辑上 ...

  3. python学习笔记(八)-模块

    大型python程序以模块和包的形式组织.python标准库中包含大量的模块.一个python文件就是一个模块.1.标准模块 python自带的,不需要你安装的2.第三方模块 需要安装,别人提供的. ...

  4. Python学习笔记-常用模块

    1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...

  5. Python学习笔记1—模块

    模块的使用 引用模块的两种形式 形式一: import module_name 形式二: from module1 import module11   (module11是module的子模块) 例: ...

  6. Python学习笔记2——模块的发布

    1.为模块nester创建文件夹nester,其中包含:nester.py(模块文件): """这是"nester.py"模块,提供了一个名为prin ...

  7. python学习笔记十——模块与函数

    第五章 模块与函数 5.1 python程序的结构 函数+类->模块              模块+模块->包                 函数+类+模块+包=Python pyth ...

  8. Python学习笔记14—模块

    在python中所有的模块都被加入到了sys.path中,用下面的方法可以看见模块的位置. >>> import sys >>> import pprint > ...

  9. python学习笔记:模块——自定义模块的3种导入方式

    一.定义 模块就是用一堆的代码实现了一些功能的代码的集合,通常一个或者多个函数写在一个.py文件里,而如果有些功能实现起来很复杂,那么就需要创建n个.py文件,这n个.py文件的集合就是模块.如果不懂 ...

随机推荐

  1. 字符编码的故事(ASCII,ANSI,Unicode,Utf-8区别)转载

    http://www.imkevinyang.com/2009/02/字符编解码的故事(ascii,ansi,unicode,utf-8区别).html 很久很久以前,有一群人,他们决定用8个可以开合 ...

  2. unix 网路编程(卷一)第一个程序编译过程

    unix卷一去年暑假买的到现在才开始看无比惭愧,而且惭愧第一个程序就断断续续弄了几天,要好好写程序了,马上要找工作了,下面介绍下把本书第一个程序跑起来的过程: 搜各种博客 我用系统的是ubuntu 1 ...

  3. linux 常识笔记 20160621

    Linux分四部分 Linux内核 GNU工具组建 图形化桌面环境 应用软件 Linux系统的核心是内核,内核控制着计算机系统上的所有硬件和软件:必要时分配硬件,有需要时执行软件. 内核负责四项主要功 ...

  4. spring-boot + Ehcache without XML

    http://stackoverflow.com/questions/21944202/using-ehcache-in-spring-4-without-xml 1.Ehcache配置类 @Conf ...

  5. update目标在查询返回结果集中的解决方案

     示例: students为学生信息表 Score为成绩表 两个表通过学生号关联 要求:将总成绩小于100的学生名称改为‘天才’ sql如下: error提示:update目标不能在查询返回结果集中 ...

  6. 移动端web学习总结

    前言: 一直想做一个移动端的阶段性学习总结,但是工作太忙总是加班.现在总算可以抽出一点时间来写一写,把知道的都写下来,这样就算忘掉了,也能很快想起来,不要太机智啊,哈哈哈! 一.移动端页面常识 1.常 ...

  7. SSM成功了

  8. 序列化和反序列化(C#)

    有时候我们希望把类的实例保存下来,以便以后的时候用.一个直观的方法就是StreamWriter把类写成一行,用\t分隔开每个属性,然后用StreamReader读出来. 但是这样太麻烦,代码行数较多, ...

  9. ASPxGridView动态创建表格列编辑模板

    在项目中用到了DevExpress的ASPxGridview控件,每每去配置它的时候,总感觉很是啰嗦,于是想到了用代码自动配置. 于是有了这样的代码: foreach (ZiyuWeb.Entity. ...

  10. java异常处理练习

    异常的练习: 老师用电脑上课. 开始思考上课中出现的问题. 比如问题是    电脑蓝屏.    电脑冒烟. 要对问题进行描述,封装成对象. 可是当冒烟发生后,出现讲课进度无法继续. 出现了讲师的问题: ...