在Python中有效地在两个方向上迭代双端队列

时间:2015-07-21 19:48:03

标签: python python-2.7

我有一个双端队列,我们​​称之为deq。我需要从两端迭代它,在这些迭代过程中我根本不会修改它。

当然,我不想创建另一个双端队列。 我考虑过reversed,但我不知道它是否真的会创建任何副本。例如,如果我写的是:

reversed_deq = reversed(deq)

它会引用完全相同的内存位置,但只是反向迭代它,而不再使用任何内存/时间吗?

这似乎是采用双端队列的合理方式,但我想确保我没有遗漏任何东西。

我找不到deque的代码(通常他们有" python等价物"这些东西,但我找不到它),并且出于某种原因 - 无论如何我跑的是什么 - timeit总能给我15到16 ns之间的东西(对于我试图计时的一切,不仅仅是这个)

2 个答案:

答案 0 :(得分:5)

C source反转([deque])返回反向迭代器,没有副本或内存分配。 [deque] .reverse()会将其反转到位。

答案 1 :(得分:1)

Python 23文档指出reversed()内置函数“返回反向iterator”。严格来说,这并不妨碍实现collections.deque.__reversed__()来制作副本。实际上,没有理由复制,因为双端队列自然可以在两个方向上迭代。