我试图创建一个打印重复序列的迭代器
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方法吗?
答案 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()