[英]What python deque-like containers retain valid iterators during mutation?
我在这里看到 collections.deque 不是一个很好的选择,如果我想在改变数据结构的同时保留有效的迭代器。 python的stdlib中是否有任何数据结构在支持这两个操作的同时保留有效的迭代器:
考虑一个生成数据流的类。 有多个消费者在这个类上调用__iter__
来获得一个迭代器来按顺序消费数据。 为简单起见,假设__iter__
调用发生在任何__next__
调用之前。
假设流足够大,可能会超出合理的内存限制。 一个合理的做法是使用双端队列,这样当迭代器在双端队列的末尾时,我们阻塞等待新数据并append
它。 当所有迭代器都访问过一个元素时,我们不再需要将它保存在内存中,所以我们popleft
。
C++ 中的std::deque
实现使用缓冲区的循环列表,并允许我们在这两个操作上拥有有效的迭代器。 python中也有类似的东西吗?
itertools.tee
专为您的用例而设计。 在内部,它使用指向共享 FIFO 队列的迭代器,但数据结构是tee
实现的内部结构(它是用 C 编写的,至少是用 CPython 编写的)。
在tee
顶部实现带有迭代器(您的实际问题)的 FIFO 队列可能是可能的,但它很棘手,部分原因是迭代器接口指定在引发StopIteration
后不会再出现更多值,而典型的 FIFO 仍然可以在弹出失败后使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.