在Python中有效地在两个方向上迭代deque

tpgth1q7  于 2023-01-16  发布在  Python
关注(0)|答案(2)|浏览(175)

我有一个双端队列,我们叫它deq,我需要从两端迭代它,在迭代过程中我不会修改它。
当然,我不想创建 * 另一个 * 双端队列,我考虑过reversed,但我不知道它是否真的创建了任何副本,例如,如果我写:

reversed_deq = reversed(deq)

它是否会引用完全相同的内存位置,只是简单地反向迭代,而不使用更多的内存/时间?
对于双端队列,这似乎是合乎逻辑的方法,但我希望确保没有遗漏任何内容。
我找不到deque的代码(通常他们有一个“python等价物”,但我找不到),而且由于某种原因--无论我运行什么--timeit总是给我15到16 ns之间的时间(对于我尝试计时的所有事情,不仅仅是这个)

jv2fixgn

jv2fixgn1#

从C源代码reversed([deque])返回一个反向迭代器,没有副本或内存分配。[deque].reverse()将在适当的位置反转它。

mkshixfv

mkshixfv2#

Python 2和Python 3文档声明reversed()内置函数“返回一个反向迭代器”。严格地说,这并不妨碍collections.deque.__reversed__()的实现进行复制。实际上,没有理由复制,因为双端队列自然是双向可迭代的。

相关问题