包括创建和使用迭代器的函数。
迭代器是可以记录遍历位置。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
常用函数
itertools模块包括较多关于迭代器创建、合并、切分等操作的函数,这里介绍如下几个。
permutations生成一个迭代对象的全排列; chain连接多个列表或者迭代器;cycle对输入对象生成循环迭代对象;count基于给定初值和步长,进行无限迭代;islice指定起、终点、步长的迭代器。
itertools.permutations(iterable,r=None) --> permutations object
#r表示迭代器中元素的长度
itertools.chain(*iterables) --> chain object
itertools.cycle(iterable) --> cycle object
itertools.count(start=0,step=1) --> count object
itertools.islice(iterable,start,stop,step=1) --> islice object
#类似切片操作,但是输出为迭代器对象。
注意:对于迭代对象的输出,有限迭代对象可以转化为list,直接一次性输出。或者利用循环遍历结果等方法。内置函数next()可以用来输出迭代对象。
示例
permutations
import itertools
data=itertools.permutations('abc')
list(data)
#输出:
"""
[('a', 'b', 'c'),
('a', 'c', 'b'),
('b', 'a', 'c'),
('b', 'c', 'a'),
('c', 'a', 'b'),
('c', 'b', 'a')]
"""
data=itertools.permutations('001')
list(data)
"""
[('0', '0', '1'),
('0', '1', '0'),
('0', '0', '1'),
('0', '1', '0'),
('1', '0', '0'),
('1', '0', '0')]
"""
#permutations输出的是输入对象的全排列,因此对于重复元素会出现重复结果,如('0', '0', '1')。
chain
import itertools
itertools.chain(range(5),range(100,105))
#输出为迭代器对象:<itertools.chain at 0x7f01d56d1cc0>
list(itertools.chain(range(5),range(100,105)))
#输出:[0, 1, 2, 3, 4, 100, 101, 102, 103, 104]
list(itertools.chain(range(3),['s','a'],'124'))
#输出:[0, 1, 2, 's', 'a', '1', '2', '4']
cycle
import itertools
for i in itertools.cycle('abc'):
res.append(i)
#因为迭代对象无限循环,因此指定输出长度break
if len(res)==7:break
print(res)
#输出:['a', 'b', 'c', 'a', 'b', 'c', 'a']
count
import itertools
data=itertools.count(10,2)#初值为10,步长为2
#使用循环遍历迭代结果,因为是无限迭代,所以设定大于20则退出
for i in data:
if i>20:break
print(i)
#输出:10 12 14 16 18 20
islice
import itertools
list(itertools.islice('abcdefg',2,5))#起始索引2,终止索引5,默认步长1
#输出:['c', 'd', 'e']