使生成器无限遍历容器的最佳实践

时间:2018-11-04 13:50:01

标签: python python-3.x

我正在尝试使用生成器从容器中返回元素,但它需要先返回/耗尽所有元素,然后再做一次。

我之所以这样说,是因为有一种比for循环更快/更好或更pythonic的方式来执行此操作,因为我不需要按顺序排列它们,但我不想两次获得同一项直到它已经用尽了所有元素。

下面的示例是一个元组,尽管如果有比我所有人都喜欢的容器类型更好的容器类型。

elements = ('a', 'b', 'c', ...)

def get_next_element():
    while True:
        for e in elements:
            yield e

必须有不同的方法来做到这一点,或者这是最好的方法吗?

我正在使用Python 3.6。

1 个答案:

答案 0 :(得分:5)

使用itertools.cycle() callable即可:

  

制作一个迭代器,从迭代器返回元素并保存每个元素的副本。当Iterable耗尽时,从保存的副本中返回元素。无限重复。

这完全符合您的纯python函数所做的事情,此外它还缓存元素,因此输入可以是任何迭代器(不仅是可重复使用的迭代器,例如元组),而且可以在高效的C语言中完成。