Python 如何无休止地重新启动字符串迭代器?

Python 如何无休止地重新启动字符串迭代器?,python,python-3.x,iterator,generator,Python,Python 3.x,Iterator,Generator,这个问题有点相关,一个。假设我有两个不同长度的生成器/迭代器: >>> s = "abcde" >>> r = range(0, 16) 现在我想在较短的一个上重复迭代,直到较长的一个用完为止。两个函数中较短的函数用完后,标准函数终止: >>> for c, i in zip(s, r) : ... print(c, i) ... a 0 b 1 c 2 d 3 e 4 我能想到的最好办法是将字符串包装到生成器中,如下所示: &

这个问题有点相关,一个。假设我有两个不同长度的生成器/迭代器:

>>> s = "abcde"
>>> r = range(0, 16)
现在我想在较短的一个上重复迭代,直到较长的一个用完为止。两个函数中较短的函数用完后,标准函数终止:

>>> for c, i in zip(s, r) :
...     print(c, i)
... 
a 0
b 1
c 2
d 3
e 4
我能想到的最好办法是将字符串包装到生成器中,如下所示:

>>> def endless_s(s) :
...     while True :
...         for c in s :
...             yield c
这给了我想要的结果

>>> _s = endless_s(s)
>>> for c, i in zip(_s, r) :
...     print(c, i)
... 
a 0
b 1
c 2
d 3
e 4
a 5
b 6
c 7
d 8
e 9
a 10
b 11
c 12
d 13
e 14
a 15
现在我想知道:有没有更好、更紧凑的方法?像一个无止境的字符串连接,或者类似的?

您可以通过以下方式来实现:

生成一个迭代器,从iterable返回元素并保存 每份的复印件。当iterable耗尽时,从 保存的副本。无限期地重复

可以完全替代您的功能:

from itertools import cycle as endless_s

正是我想要的:
对于c,我在zip中(itertools.cycle(s),r)