据我了解,使用生成器是实现此类目标的最佳方式,但我愿意接受建议。
具体来说,一个用例是这样的:我想在另一个列表旁边打印一些项目,任意长度,必要时截断初始迭代器。
这是演示我想要的确切示例行为的工作 python 代码:
def loop_list(iterable):
"""
Return a Generator that will infinitely repeat the given iterable.
>>> l = loop_list(['sam', 'max'])
>>> for i in range(1, 11):
... print i, l.next()
...
1 sam
2 max
3 sam
4 max
5 sam
6 max
7 sam
8 max
9 sam
10 max
>>> l = loop_list(['sam', 'max'])
>>> for i in range(1, 2):
... print i, l.next()
...
1 sam
"""
iterable = tuple(iterable)
l = len(iterable)
num = 0
while num < l:
yield iterable[num]
num += 1
if num >= l:
num = 0
问题/我的问题
您可能已经注意到,这仅适用于实现的列表/元组/迭代__getitem__
(如果我没记错的话)。理想情况下,我希望能够传递任何可迭代对象,并接收一个可以正确循环其内容的生成器。
如果有更好的方法可以在没有生成器的情况下执行此类操作,我也可以。