【发布时间】:2022-01-19 13:32:39
【问题描述】:
如果我有一个迭代器foo 和一个函数progress 可以任意推进它(但保证它永远不会引发StopIteration),我如何继续调用progress 直到foo是空的吗?
看起来iter([]) 是真的。
这是我最好的尝试:
from itertools import islice
import copy
# Let's say I can't touch this function.
def progress(xs):
islice(xs, 1) # or some other arbitrary value.
foo = iter(a_list)
while list(copy.copy(foo)): # ????
progress(foo)
【问题讨论】:
-
能否提供一个更完整的代码示例,好吗?如果不定义
foo是什么以及progress如何影响它,就很难理解您想要实现的目标。 -
如果你想把
foo的内容放在一个列表中直到foo用完,那么就做mylist = list(foo)。否则,您需要更清楚地解释您要做什么。 -
我喜欢这个问题,但它仍然含糊不清。也许您发布了一些
progress究竟做了什么的例子? -
Python 中迭代器的定义是:“一个迭代器对象实现了
__next__,它期望返回返回它的可迭代对象的下一个元素,并在没有时引发 StopIteration 异常更多元素可用。”因此,如果您的progress()函数从不尝试获取超出迭代器末尾的项目,那么当调用它并且foo为空时它会做什么? -
好点。我在描述中澄清了:
progress使用itertools.islice,看来这很重要。抱歉不清楚。