有没有人知道任何等同于itertools.tee
但能够动态添加迭代器的东西?
itertools.tee
函数正是我想要的,除了在调用函数时必须修复迭代器的数量。我喜欢具有相同功能的东西,但它允许稍后添加新的迭代器,甚至可能在一些迭代器开始迭代之后。
我想避免多次调用itertools.tee
,因为这可能会占用大量内存(我可能拥有数百万个迭代器)。来自itertools.tee
的Python文档:
以下Python代码有助于解释tee的作用(尽管如此) 实际实现更复杂,只使用一个 底层FIFO队列。)
...
如果稍后添加新的迭代器,他们只需要查看新到达的数据。
这是我想要的代码示例(可能在语法上不正确):
input_iterator = iter([1, 2, 3, 4, 5, 6])
tee = EnhancedTee(input_iterator)
it1 = iter(tee)
val = it1.next()
# val == 1
it2 = iter(tee)
val = it2.next()
# val == 2
val = it1.next()
# val == 2
答案 0 :(得分:0)
这已经在另一个问题中得到了回答:In python, can I lazily generate copies of an iterator using tee?。但是,我需要的答案与给出这个问题的答案略有不同。我只需要新创建的迭代器来查看新数据,所以我最初只需要tee
一个迭代器,并复制它。所以以下方法对我很有用:
input_iterator = iter([1, 2, 3, 4, 5, 6])
it1 = itertools.tee(input_iterator, 1)[0]
print(next(it1))
# prints 1
it2 = copy(it1)
print(next(it2))
# prints 2
print(next(it1))
# prints 2