在一系列数字上制作重复迭代器?

时间:2018-02-26 19:44:33

标签: python iterator modulo

我试图创建一个打印重复序列的迭代器

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, ...

我想要一个迭代器,所以我可以使用.next(),我希望它在迭代器为9时调用.next()时循环为0。 但问题是我可能会有很多这些,所以我不想做itertools.cycle([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

我不想在内存中拥有相同序列的那么多重复列表。我宁愿在每个迭代器中使用函数x + 1%10,并且只要在每次调用next时都使用迭代器增量x。我似乎无法通过itertools弄清楚如何做到这一点。有这样做的pythonic方法吗?

4 个答案:

答案 0 :(得分:3)

您可以编写使用range

的生成器
def my_cycle(start, stop, step=1):
    while True:
        for x in range(start, stop, step):
            yield x

c = my_cycle(0, 10)

答案 1 :(得分:2)

您可以使用自己的自定义生成器:

def cycle_range(xr):
    while True:
        for x in xr:
            yield x

假设您使用的是Python 2,请使用:

r = xrange(9)
it1 = cycle_range(xr)
it2 = cycle_range(xr)

为了提高记忆效率。

答案 2 :(得分:1)

您可以使用这样的自定义生成器:

def single_digit_ints():
    i = 0
    while True:
        yield i
        i = (i + 1) % 10

for i in single_digit_ints():
    # ...

答案 3 :(得分:1)

这是通过itertools

的一种方式
import itertools

def counter():
    for i in itertools.count(1):
        yield i%10

g = counter()