我正在尝试使用生成器从容器中返回元素,但它需要返回/耗尽所有元素然后再做一次。
我这么说的原因是如果有比 for 循环更快/更好或更 pythonic 的方法来做到这一点,因为我不需要它们按顺序但我不想得到相同的项目两次直到它已用尽所有元素。
下面的示例是一个元组,尽管如果有比这更好的容器类型,我会洗耳恭听。
elements = ('a', 'b', 'c', ...)
def get_next_element():
while True:
for e in elements:
yield e
必须有不同的方法来做到这一点,或者这是最好的方法吗?
我正在使用 Python 3.6。
请您参考如下方法:
使用 itertools.cycle() callable ,它就是这样做的:
Make an iterator returning elements from the iterable and saving a copy of each. When the iterable is exhausted, return elements from the saved copy. Repeats indefinitely.
这与您的纯 Python 函数完全相同,而且它缓存元素,因此输入可以是任何迭代器(不仅仅是可重复使用的迭代器,例如元组),但它是在高效的 C 中执行的。
