更改 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)
或者如果您不想处理 float
S(感谢 Kelly Bundy 的建议)。
import itertools
import functools
pow_base2 = functools.partial(pow, 2)
for i in map(pow_base2, itertools.count(start=68)):
print(i)
我使用 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)
或者如果您不想处理 float
S(感谢 Kelly Bundy 的建议)。
import itertools
import functools
pow_base2 = functools.partial(pow, 2)
for i in map(pow_base2, itertools.count(start=68)):
print(i)