python模块 itertools

fanhuasijin 2020-06-21

itertools

我们知道,迭代器的特点是:惰性求值(Lazy evaluation),即只有当迭代至某个值时,它才会被计算,这个特点使得迭代器特别适合于遍历大文件或无限集合等,因为我们不用一次性将它们存储在内存中。

Python 内置的 itertools 模块包含了一系列用来产生不同类型迭代器的函数或类,这些函数的返回都是一个迭代器,我们可以通过 for 循环来遍历取值,也可以使用 next() 来取值。

itertools 模块提供的迭代器函数有以下几种类型:

  • 无限迭代器:生成一个无限序列,比如自然数序列 1, 2, 3, 4, ...
  • 有限迭代器:接收一个或多个序列(sequence)作为参数,进行组合、分组和过滤等;
  • 组合生成器:序列的排列、组合,求序列的笛卡儿积等;

无限迭代器

itertools 模块提供了三个函数(事实上,它们是类)用于生成一个无限序列迭代器:

  • count(startl=0, step=1)

    创建一个从 start (默认值为 0) 开始,以 step (默认值为 1) 为步长的的无限整数迭代器

  • cycle(iterable)

    对 iterable 中的元素反复执行循环,返回迭代器

  • repeat(object [,n]

    反复生成 object,如果给定 n,则重复次数为 n,否则为无限

Iterator

Arguments

Results

Example

<span>count()</span>

start, [step]

start, start+step, start+2*step, …

<span>count(10) <span>--> <span>10 <span>11 <span>12 <span>13 <span>14<span>...</span></span></span></span></span></span></span></span>

<span>cycle()</span>

p

p0, p1, … plast, p0, p1, …

<span>cycle(‘ABCD‘) <span>--> <span>A <span>B <span>C <span>D <span>A<span>B <span>C <span>D <span>...</span></span></span></span></span></span></span></span></span></span></span>

<span>repeat()</span>

elem [,n]

elem, elem, elem, … endlessly or up to n times

<span>repeat(10, <span>3) <span>--> <span>10 <span>10 <span>10</span></span></span></span></span></span>

有限迭代器

itertools 模块提供了多个函数(类),接收一个或多个迭代对象作为参数,对它们进行组合、分组和过滤等:

Iterator
Arguments
Results
Example
chain()
p, q, …
p0, p1, … plast, q0, q1, …
chain(‘ABC‘, ‘DEF‘) --> A B CD E F
chain.from_iterable()
iterable
p0, p1, … plast, q0, q1, …
chain.from_iterable([‘ABC‘,‘DEF‘]) --> A B C D E F
dropwhile()
pred, seq
seq[n], seq[n+1], starting when pred fails
dropwhile(lambda x: x<5,[1,4,6,4,1]) --> 6 4 1
takewhile()
pred, seq
seq[0], seq[1], until pred fails
takewhile(lambda x: x<5,[1,4,6,4,1]) --> 1 4
tee()
it, n
it1, it2, … itn splits one iterator into n
 
 

相关推荐