Python:使用动态创建的迭代器的itertools.tee

时间:2017-08-30 15:33:40

标签: python itertools

有没有人知道任何等同于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

1 个答案:

答案 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