我正在尝试使用生成器从容器中返回元素,但它需要先返回/耗尽所有元素,然后再做一次。
我之所以这样说,是因为有一种比for循环更快/更好或更pythonic的方式来执行此操作,因为我不需要按顺序排列它们,但我不想两次获得同一项直到它已经用尽了所有元素。
下面的示例是一个元组,尽管如果有比我所有人都喜欢的容器类型更好的容器类型。
elements = ('a', 'b', 'c', ...)
def get_next_element():
while True:
for e in elements:
yield e
必须有不同的方法来做到这一点,或者这是最好的方法吗?
我正在使用Python 3.6。
答案 0 :(得分:5)
使用itertools.cycle()
callable即可:
制作一个迭代器,从迭代器返回元素并保存每个元素的副本。当Iterable耗尽时,从保存的副本中返回元素。无限重复。
这完全符合您的纯python函数所做的事情,此外它还缓存元素,因此输入可以是任何迭代器(不仅是可重复使用的迭代器,例如元组),而且可以在高效的C语言中完成。