Python标准模块--itertools

本文介绍了Python的itertools模块,包括无限迭代器如count、cycle、repeat,有限迭代器如accumulate、chain、compress等,以及组合产生器如combinations、combinations_with_replacement、product和permutations。通过实例展示了如何使用这些工具创建无限和有限迭代器,并进行了操作演示。
摘要由CSDN通过智能技术生成

1 模块简介

Python提供了itertools模块,可以创建属于自己的迭代器。itertools提供的工具快速并且节约内存。开发者可以使用这些工具创建属于自己特定的迭代器,这些特定的迭代器可以用于有效的遍历。

2 模块使用

2.1 无限迭代器

itertools中有个三个迭代器是无限迭代的,这就意味着当你在使用它们时,你需要了解你要么从这些迭代器中终止,要么就是无限循环。

count

count(start = 0, step = 1),count迭代器返回一系列值,以传入的start参数开始,Count也可以接受step参数。

from itertools import count

for i in count(10):
    if i > 20:
        break
    else:
        print i,

通过条件判断,如果超出20,就从for循环中break出来,否则,就打印迭代器中的值,控制台输出,

10 11 12 13 14 15 16 17 18 19 20

另一种限制无限迭代器的输出是通过itertools中的islice方法,如下所示,

from itertools import count,islice

for i in islice(count(10),10):
    print i,

count从10开始,在10个元素之后结束。islice的第二个变量是指定何时停止迭代,但是,它并不是"当达到10时停止",而是"当达到10次迭代时停止",控制台输出,

10 11 12 13 14 15 16 17 18 19

cycle

itertools中的cycle迭代器允许开发者在一个序列上创建一个无限循环的迭代器。使用一个for循环在三个字母"XYZ"中构成无限循环。当然,我们并不期待永远循环下去,所以设置了一个简单的计数器,用于终止循环。

from itertools import cycle

count = 0

for item in cycle("XYZ"):
    if count > 7:
        break
    print item
    count += 1

控制台输出,

X
Y
Z
X
Y
Z
X
Y

也可以使用Python内置的next函数在itertools所创建的迭代器上迭代。

>>> from itertools import cycle
>>> polys = ['a','b','c','d']
>>> iterator = cycle(polys)
>>> next(iterator)
'a'
>>> next(iterator)
'b'
>>> next(iterator)
'c'
>>> next(iterator)
'd'
>>> next(iterator)
'a'
>>> next(iterator)
'b'

上述代码,我创建了一个简单的列表,并且将它传递给cycle。我将新的迭代器保存到一个变量中,并将这个变量传递给next函数,每次我调用next函数,它都会返回迭代器中的下一个值,由于迭代器是无限的,因此我们一直调用next函数,也不会超出元素的范围。

repeat

repeat迭代器返回一个又一个对象,除非你设定了次数。repeat类似于cycle,但是它不会在一个集合中重复循环。引入repeat,并且指定重复数字5次,然后我们在新的迭代器上调用next函数6次,当运行这段代码时,就会发现StopIteration错误被抛出,因为我们运行超出了我们的迭代器。

>>> from itertools import repeat
>>> repeat(4,5)
repeat(4, 5)
>>> iterator = repeat(4,5)
>>> next(iterator)
4
>>> next(iterator)
4
>>> next(iterator)
4
>>> next(iterator)
4
>>> next(iterator)
4
>>> next(iterator)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    next(iterator)
StopIteration

2.2 有限迭代器

大部分你通过itertools所创建的迭代器都不是无限的。在这部分,我们将会学习itertools中有限的迭代器,为了让输出可读性强,我们使用Python内置的list类值,如果你不使用list,你就会仅仅打印出迭代器对象。

accumulate

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值