Python自动求值queu的数据结构

2024-04-19 07:39:06 发布

您现在位置:Python中文网/ 问答频道 /正文

对于一个队列,有没有标准的库数据结构,当一个项从队列的另一端弹出时,它会自动重新加入到队列的另一端?这感觉像是一个常见的问题,所以我想可能有一个简单的数据结构可以做到这一点

例如:

from collections import deque
from time import sleep

queue = deque([1, 2, 3, 4, 5, 6, 7, 8])

while True:
    item = queue.pop()
    queue.appendleft(item)
    print(item)
    sleep(5)

上面的代码实际上是最优的,还是有更好的方法来解决这个问题?
在循环的每次迭代中使用一个列表并修改一个索引值来更改访问列表中的哪个位置会更好吗


Tags: fromimport数据结构列表标准time队列queue
3条回答

退房

https://docs.python.org/2/library/itertools.html#itertools.cycle

def cycle(iterable):
    # cycle('ABCD')  > A B C D A B C D A B C D ...
    saved = []
    for element in iterable:
        yield element
        saved.append(element)
    while saved:
        for element in saved:
              yield element

这可能会满足您的需要,而且效率很高

deque.rotate()

“collections.deque”可以像列表一样编制索引,并具有rotate方法

from collections import deque
from time import sleep

queue = deque([1, 2, 3, 4, 5, 6, 7, 8])

while True:
    item = queue[0]
    queue.rotate(1)
    print(item)
    sleep(5)

你所做的叫做旋转。Deque将此作为一个内置项:^{}

Rotate the deque n steps to the right. If n is negative, rotate to the left.

When the deque is not empty, rotating one step to the right is equivalent to d.appendleft(d.pop()), and rotating one step to the left is equivalent to d.append(d.popleft()).

用法:

>>> from collections import deque
>>> dq = deque()
>>> dq.append(4)
>>> dq.append(5)
>>> dq.append(6)
>>> dq
deque([4, 5, 6])
>>> dq.rotate()
>>> dq
deque([6, 4, 5])
>>> dq.rotate(2)
>>> dq
deque([4, 5, 6])
>>> dq.rotate(-2)
>>> dq
deque([6, 4, 5])

相关问题 更多 >