一行用itertools重复计数器?

时间:2015-07-18 02:31:13

标签: python itertools

我想使用包含countrepeat迭代器的itertools编写infinte生成器,在递增之前重复每个数字n次。有没有比我提出的更简洁的方法呢?

from itertools import *
def repeating_counter(times):
    c = count()
    while True:
        for x in repeat(next(c), times):
            yield x

>>> rc = repeating_counter(2)
>>> next(rc)
0
>>> next(rc)
0
>>> next(rc)
1
>>> next(rc)
1

2 个答案:

答案 0 :(得分:4)

使用整数除法!

def repeating_counter(times):
    return (x // times for x in count())

答案 1 :(得分:1)

虽然它没有minitech的答案那么优雅,但我认为你可以简化你当前的逻辑,以便将功能体整合到一行:

def repeating_counter(times):
    for x in count(): yield from repeat(x, times)

如果正在使用的迭代器永远不会结束,for循环可以无限期地运行(就像while True循环一样)。 Python 3.3中引入的yield from表达式使得代码的内部循环变得不必要。如果您使用的是早期版本的Python,那么您需要重新启动该循环,我认为这需要使用多行代码。