python itertools模块学习笔记,pythonitertools,python itert


python itertools模块学习笔记

以下函数均返回迭代器

count

原型:

count(start[, step])

返回:

start, start+step, start+2*step, ... (以start为首项, step为公差的等差数列)

example:

count(10):10, 11, 12, 13, .....

cycle

原型:

cycle(p)

返回:

p0, p1, p2, ...,plast, p0, p1, ... (对序列循环遍历)

repeat

原型

repeat(elem[, n])

返回:

elem, elem, elem...( 重复n次或者无限下去)

chain

原型:

chain(p, q, ...)

返回:

p0, p1, ..., plast, q0, q1, ..., qlast, ... (一个一个地遍历这些序列的, 不必生成大序列即可这样遍历)

compress

原型:

compress(data d, selector s)

返回:

(d[0] if s[0]), (d[1] if s[1]), ...

例子:

from itertools import *for i in compress("abcdef", [1, 1, 0, 1, 0, 1]): # a, b, d, f    print i

dropwhile

原型:

dropwhile(func f, seq q)

返回:

当函数f执行返回假时, 开始迭代序列

例子:

from itertools import *for i in dropwhile(lambda x:x<5, [1, 2, 6, 4, 3]):#6, 4, 3    print i

groupby

原型:

groupby(iterable[, keyfunc])

返回:按照keyfunc函数对序列每个元素执行后的结果分组(每个分组是一个迭代器), 返回这些分组的迭代器

例子:

from itertools import *a = ['aa', 'ab', 'abc', 'bcd', 'abcde']for i, k in groupby(a, len):#按照字符串的长度对a的每个元素进行分组    for m in k:        print m,     print i

输出:

aa ab 2abc bcd 3abcde 5

ifilter

原型:

ifilter(func, seq)

返回:对函数func执行返回真的元素的迭代器

例子:

from itertools import *a = [1, 2, 3, 4, 5]for i in ifilter(lambda x:x>3, a):#4, 5    print i

ifilterfalse

原型:

ifilterfalse(func, seq)

返回:对函数func执行返回假的元素的迭代器

islice

原型:

islice(seq[, start], stop[, step])

返回:返回序列seq的从start开始到stop结束的步长为step的元素的迭代器

from itertools import *for i in islice("abcdef", 0, 4, 2):#a, c    print i

imap

原型:

imap(func, seq)

返回 :返回序列每个元素被func执行后返回值的序列的迭代器

from itertools import *for i in imap(lambda x:x+1, range(10)):#1, 2, ..., 10    print i

starup

原型:

starup(func, seq)

返回:对序列seq的每个元素作为func的参数列表执行, 返回执行结果的迭代器

例子:

from itertools import *for i in starmap(pow, [(2,2), (3, 2)]):#4, 9    print i

tee

原型:

tee(it[, n = 2])

把一个迭代器分为n个迭代器, 返回一个元组.默认是两个

from itertools import *a = "hello"c, d = tee(iter(a), 2)for i, j in zip(c, d):    print i, j

输出:

h he el ll lo o

takewhile

原型:

takewhile(func, seq)

从序列的头开始, 直到执行函数func失败.

例子:

from itertools import *for i in takewhile(lambda x:x<6, range(10)):#1, 2, 3, 4, 5    print i

izip

雷同于zip

原型:

izip(iter1, iter2, ... iterN):

返回:(it1[0],it2 [0], it3[0], ..), (it1[1], it2[1], it3[1], ..)...

只要提供的某个迭代器不再生成值,迭代就会停止

izip_longest

原型同izip

只不过, 迭代过程会持续到所有输入迭代变量iter1,iter2等都耗尽为止,如果没有使用fillvalue关键字参数指定不同的值,则使用None来填充已经使用的迭代变量的值

permutations

原型:

permutations(p[, r])

返回p中任意取r个元素做排列的元组的迭代器

实例:

from itertools import *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)

product

原型:

product(iter1, iter2, ... iterN, [repeat=1])

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

from itertools import *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)

combinations()

原型

combinations(iterable, r)

创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序

note:不带重复

例子:

from itertools import *for i in combinations([1, 2, 3], 2):    print i

输出:

(1, 2)(1, 3)(2, 3)

combinations_with_replacement

同上, 带重复 例子:

from itertools import *for i in combinations_with_replacement([1, 2, 3], 2):    print i

输出:

(1, 1)(1, 2)(1, 3)(2, 2)(2, 3)(3, 3)

评论关闭