在python中itertool为python提供一系列迭代iterator的方法。

第一个:组合 排列

itertools.combinations(sq, r)

该函数的作用是在列表sq中穷举所有的组合项目。 地一个参数是列表,第二个参数一个项中的个数。

比如参数为‘abcd’和2。意思为从abcd中两两组合。 ab,ac,ad,bc,bd,cd

import itertools
str = 'abcd'
com = itertools.combination(str, 2)
print [item for item in com]

结果:[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]

这是组合,自然有排列。

排列和组合的区别在于一个元素tuple内,先后顺序是否决定一个元素。比如(a,b)与(b,a),组合认为这是一个tuple,而排列认为这是两个。

组合的函数有:combinations,combinations_with_replacement。 两者区别在于是否出现如(a,a),(b,b)这种元素。

排列:product, permutations

itertools.compress(list, selector):

根据selector的true和false选择list中的字符

比如list=‘abcd' selector=[1,2,0,0] 选择结果ab

import itertools
test = 'abcdefghijk'
selector = [1,2,3,0,0,0,1,1,1,1,1]
it = itertools.compress(test, selector)
for [item for item in it]
print [item for item in it]

 结果:['a', 'b', 'c', 'g', 'h', 'i', 'j', 'k']

无限的函数

itertools.count(start, step)

从start开始,每次增长step。

如itertools.count(2, 5)  迭代后  2, 7, 12, 17, 22, 27,。。。。。

itertools.circle(p)

圈,很形象的函数名称。将p列表周而复始的迭代。

如itertools.circle('abcd'), 结果: a b c d a b c d a b c d a b c d......

itertools.repeat(elem, n)

将elem循环n次,如果没有参数n,无限循环。

itertools.repeat('abc', 4) 结果 abc abc abc abc

itertools.repeat('ab') 结果:ab ab ab 。。。。

根据条件选择内容:

itertools.dropwhile(pred, list)

itertools.takewhile(pred, list)

将list内容元素放入pred中进行判断,如果为True, dropwhile:丢弃, takewhile:保留。

import itertools
test = [3,4,5,6,7,8,9]
it = itertools.dropwhile(lambda x:x<6, test)
print [item for item in it]
it = itertools.takewhile(lambda x:x<6, test)
print [item for item in it]

 结果:[6, 7, 8, 9]    [3, 4, 5]

类似函数:ifilter, ifilterfalse

函数调用

itertools.imap(func, para1list, para2list,×)

从para1list和para2list获取参数调用函数func。

import itertools
def func(a, b, c):
return a + b + c
list1 = [1,2,3,4]
list2 = [5,6,7,8]
list3 = [0,1,0,1]
it = itertools.imap(func, list1, list2, list3)
print [item for item in it]

  结果:[6, 9, 10, 13]

类似函数:starmap

打包:

itertools.izip(list1, list2,*)

将list1中的元素与list2中的元素对应位置成为一个tuple。

list1 = [1,2,3,4]
list2 = [5,6,7,8]
list3 = [0,1,0,1]
it = itertools.izip(list1, list2, list3)
print [item for item in it]

  结果:[(1, 5, 0), (2, 6, 1), (3, 7, 0), (4, 8, 1)]

如果列表长度不一致,返回最短。

list1 = [1,2,3,4]
list2 = [5,6]
list3 = [0,1,0,1]
it = itertools.izip(list1, list2, list3)
print [item for item in it]

  结果:[(1, 5, 0), (2, 6, 1)]

如果希望根据最长的列表返回,这就需要对短的列表进行填充。

list1 = [1,2,3,4]
list2 = [5,6]
list3 = [0,1,0,1]
it = itertools.izip_longest(list1, list2, list3, fillvalue='x')
print [item for item in it]

  结果:[(1, 5, 0), (2, 6, 1), (3, 'x', 0), (4, 'x', 1)]

itertools 介绍的更多相关文章

  1. python基础=== itertools介绍(转载)

    原文链接:http://python.jobbole.com/85321/ Python提供了一个非常棒的模块用于创建自定义的迭代器,这个模块就是 itertools.itertools 提供的工具相 ...

  2. python自带的排列组合函数

    需求: 在你的面前有一个n阶的台阶,你一步只能上1级或者2级,请计算出你可以采用多少种不同的方法爬完这个楼梯?输入一个正整数表示这个台阶的级数,输出一个正整数表示有多少种方法爬完这个楼梯. 分析:提炼 ...

  3. python迭代器以及itertools模块

    迭代器 在python中,迭代器协议就是实现对象的__iter()方法和next()方法,其中前者返回对象本身,后者返回容器的下一个元素.实现了这两个方法的对象就是可迭代对象.迭代器是有惰性的,只有在 ...

  4. python itertools 模块讲解

    1.介绍itertools 是python的迭代器模块,itertools提供的工具相当高效且节省内存. 使用这些工具,你将能够创建自己定制的迭代器用于高效率的循环. - 无限迭代器 itertool ...

  5. 迭代器模块 itertools

    无限迭代器 itertools 包自带了三个可以无限迭代的迭代器.这意味着,当你使用他们时,你要知道你需要的到底是最终会停止的迭代器,还是需要无限地迭代下去. 这些无限迭代器在生成数字或者在长度未知的 ...

  6. Python的itertools模块

    本章将介绍Python自建模块itertools,更多内容请参考:Python参考指南 python的自建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertool ...

  7. HBase - Filter - 过滤器的介绍以及使用

    1 过滤器HBase 的基本 API,包括增.删.改.查等.增.删都是相对简单的操作,与传统的 RDBMS 相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根据行键的范围来查询( ...

  8. 【Python】operator 模块简单介绍

    简单介绍几个常用的函数,其他的请参考文档. operator.concat(a, b) **operator.__concat__(a, b)** 对于 a.b序列,返回 a + b(列表合并) -- ...

  9. [PY3]——过滤数据——列表推导、filter()、itertools.compress()

    问题 你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列 解决方案 最简单的过滤数据的方法,就是使用列表推导. 使用列表推导的一个潜在缺陷就是如果输入非常大的时候会产生一个非常大的结果集 ...

随机推荐

  1. spring 架构学习

    学习目的用于抽象业务逻辑,因spring本身就是抽象业务逻辑的框架,如做业务架构网面的工作 spring为不二之选. 一些好的网址 http://www.ibm.com/developerworks/ ...

  2. dubbox编译

    dubbox编译要在命令行 切记切记 设置JAVA_HOME 设置maven路径 命令编译dubbox 设置M2_HOME环境变量 设置idea M2_HOME dubbox 服务端 http://w ...

  3. 页面内容排序插件jSort的使用

        当页面列表内容很多的时候,我们可能需要将内容按照某个方式进行排序,比如按照字母或者大小等排序.本文将使用排序插件jSort来对页面内容进行排序. jSort插件可以对页面任何内容进行排序(ta ...

  4. 字体和壁纸合并后再更改壁纸--《用delphi开发共享软件》-15.2桌面提示器

    procedure TFrmPlay.mnDeskPicClick(Sender: TObject); Var s:String; i:Integer; begin //s:=Path+'SetPic ...

  5. 我的c++学习(5)switch语句详解

    #include "stdafx.h" #include<iostream> using namespace std; #include<iomanip> ...

  6. C# 词法分析器(六)构造词法分析器

    系列导航 (一)词法分析介绍 (二)输入缓冲和代码定位 (三)正则表达式 (四)构造 NFA (五)转换 DFA (六)构造词法分析器 (七)总结 现在最核心的 DFA 已经成功构造出来了,最后一步就 ...

  7. 关于在C#中构造函数中调用虚函数的问题

    在C#中如果存在类的继承关系,应避免在构造函数中调用虚函数.这是由于C#的运行机制造成的,原因如下: 新建一个类实例时,C#会先初始化该类(对类变量赋值,并将函数记在函数表中),然后再初始化父类.构造 ...

  8. uva-465(overflow)

    这道题很奇葩啊,WA了4发...妈的,用c++也不至于,输出竟然要原样输出... 例如: 0000000000000000006 * 000000000000001 输出是 0000000000000 ...

  9. locale的设定及其LANG、LC_ALL、LANGUAGE环境变量的区别

    locale这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多.Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境. [ora ...

  10. ThinkPHP3.2.3--Linux服务器首页文件index.php路径配置问题

    在windows服务器环境下,可以define ('SITE_URL','http://192.168.1.101/'); 但上传到linux服务器环境下不能正常解析,可使用相对路径:define ( ...