更改 itertools 的迭代率

Change iteration rate on itertools

我使用 iter 工具有这个迭代计数:

for i in itertools.count(start=2**68):

我希望它每次都增加一个指数 (68,69,70,71,...)。 itertools 对此有支持吗?我查看了 itertools 文档中的 step 选项,但看不到任何可以通过指数类型更改的方法,只有浮点数、整数。

没有专门为此制作的功能,但很容易从基本组件制作您想要的东西:

for i in map(lambda i: 2**i, itertools.count(start=68)):

顺便说一下,其中一条评论说 map(lambda...) 是一种反模式,应该用生成器表达式代替。如果您想知道该怎么做。

for i in (2**i for i in itertools.count(start=68)):

itertools.count作为指数,单独求幂:

for exponent in itertools.count(start=68):
    i = 2 ** exponent
    print(i)

为了借鉴 Barmar 和 Blackbeans 的出色答案,可以在没有 lambda 的情况下使用 map 来实现解决方案。

import itertools
import functools
import math
pow_base2 = functools.partial(math.pow, 2)
for i in map(pow_base2, itertools.count(start=68)):
    print(i)

或者如果您不想处理 floatS(感谢 Kelly Bundy 的建议)。

import itertools
import functools
pow_base2 = functools.partial(pow, 2)
for i in map(pow_base2, itertools.count(start=68)):
    print(i)