Python中itertools模块的使用教程详解_第1页
Python中itertools模块的使用教程详解_第2页
Python中itertools模块的使用教程详解_第3页
Python中itertools模块的使用教程详解_第4页
Python中itertools模块的使用教程详解_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Python中itertools模块的使用教程详解目录itertools模块的介绍无限迭代器(InfiniteIterators)组合迭代器(CombinatoricIterators)有限迭代器(IteratorsTerminatingontheShortestInputSequence)

itertools模块的介绍

在Python中,迭代器(Iterator)是常用来做惰性序列的对象,只有当迭代到某个值的时候,才会进行计算得出这个值。因此,迭代器可以用来存储无限大的序列,这样我们就不用把他一次性放在内存中,而只在需要的时候进行计算。所以,对于读取大文件或者无线集合,最好是使用迭代器。实际上,Python2的大多数函数都是返回列表等序列,而Python3都已经改进为返回迭代器。

Python的内置模块itertools就是用来操作迭代器的一个模块,包含的函数都是能够创建迭代器来用于for循环或者next()。其中函数主要可以分为三类,分别是无限迭代器,有限迭代器,组合迭代器。

无限迭代器(InfiniteIterators)

这些函数可以生成无限的迭代器,我们主要学习以下三个函数的用法。

count([start=0,step=1])接收两个可选整形参数,第一个指定了迭代开始的值,第二个指定了迭代的步长。此外,start参数默认为0,step参数默认为1,可以根据需要来把这两个指定为其它值,或者使用默认参数。

importitertools

foriinitertools.count(10,2):

print(i)

ifi20:

break

[Running]python-u"e:\pythonee\code\test.py"

22

cycle(iterable)是用一个可迭代对象中的元素来创建一个迭代器,并且复制自己的值,一直无限的重复下去。

importitertools

foriinitertools.cycle("abcd"):

print(i)#具有无限的输出,可以按ctrl+c来停止。

[Running]python-u"e:\pythonee\code\test.py"

b

repeat(elem[,n])是将一个元素重复n遍或者无穷多遍,并返回一个迭代器。

importitertools

foriinitertools.repeat("abcd",5):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

abcd

组合迭代器(CombinatoricIterators)

组合操作包括排列,笛卡儿积,或者一些离散元素的选择,组合迭代器就是产生这样序列的迭代器。我们来看看这几个函数的用法。

product(*iterables,repeat=1)得到的是可迭代对象的笛卡儿积,*iterables参数表示需要多个可迭代对象。这些可迭代对象之间的笛卡儿积,也可以使用for循环来实现,例如product(A,B)与((x,y)forxinAforyinB)就实现一样的功能。

importitertools

foriinduct([1,2,3],[4,5,6]):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

(1,4)

(1,5)

(1,6)

(2,4)

(2,5)

(2,6)

(3,4)

(3,5)

(3,6)

而repeat参数则表示这些可迭代序列重复的次数。例如product(A,repeat=4)与product(A,A,A,A)实现的功能一样。

importitertools

foriinduct('ab','cd',repeat=2):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

('a','c','a','c')

('a','c','a','d')

('a','c','b','c')

('a','c','b','d')

('a','d','a','c')

('a','d','a','d')

('a','d','b','c')

('a','d','b','d')

('b','c','a','c')

('b','c','a','d')

('b','c','b','c')

('b','c','b','d')

('b','d','a','c')

('b','d','a','d')

('b','d','b','c')

('b','d','b','d')

permutations(iterable,r=None)返回的是可迭代元素中的一个排列组合,并且是按顺序返回的,且不包含重复的结果。

importitertools

foriinitertools.permutations('abc'):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

('a','b','c')

('a','c','b')

('b','a','c')

('b','c','a')

('c','a','b')

('c','b','a')

当然,第2个参数默认为None,它表示的是返回元组(tuple)的长度,我们来尝试一下传入第二个参数。

importitertools

foriinitertools.permutations('abc',2):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

('a','b')

('a','c')

('b','a')

('b','c')

('c','a')

('c','b')

combinations(iterable,r)返回的是可迭代对象所有的长度为r的子序列,注意这与前一个函数permutation不同,permutation返回的是排列,而combinations返回的是组合。

importitertools

foriinbinations('1234',2):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

('1','2')

('1','3')

('1','4')

('2','3')

('2','4')

('3','4')

combinations_with_replacement(iterable,r)返回一个可与自身重复的元素组合,用法类似于combinations。

importitertools

foriinbinations_with_replacement('1234',2):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

('1','1')

('1','2')

('1','3')

('1','4')

('2','2')

('2','3')

('2','4')

('3','3')

('3','4')

('4','4')

有限迭代器(IteratorsTerminatingontheShortestInputSequence)

这里的函数有十来个,主要为大家介绍其中几个常用的函数。

chain(*iterables)可以把多个可迭代对象组合起来,形成一个更大的迭代器。

importitertools

foriinitertools.chain('good','bye'):

print(i)

[Running]python-u"e:\pythonee\code\test.py"

e

groupby(iterable,key=None)可以把相邻元素按照key函数分组,并返回相应的key和groupby,如果key函数为None,则只有相同的元素才能放在一组。

importitertools

forkey,groupinitertools.groupby('AaaBBbcCAAa',lambdac:c.upper()):

print(list(group))

[Running]python-u"e:\pythonee\code\test.py"

['A','a','a']

['B','B','b']

['c','C']

['A','A','a']

accumulate(iterable[,func])可以计算出一个迭代器,这个迭代器是由特定的二元函数的累计结果生成的,如果不指定的话,默认函数为求和函数。

importitertools

foriinitertools.accumulate([0,1,0,1,1,2,3,5]):

print(i)

[Running]python

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论