队列项以原始顺序显示,后跟相反顺序的队列项副本

时间:2018-04-26 05:29:47

标签: python-3.x list queue

这是我的程序

def mirror_queue(orig_queue):
    #backup_s = my_stack_module.Stack()
    length = len(orig_queue.items)
    counter = length
    while counter > 0 :
        item1 = orig_queue.dequeue()
        item2 = orig_queue.enqueue(item1)
        counter -=1

它给出了一个输出[1,2,3]适用于所有长度甚至空列表。但我也想要它的反转版本..例如[1,2,3,3,2,1] 我尝试使用.reverse()但仅反转队列[3,2,1]

2 个答案:

答案 0 :(得分:1)

您可以创建副本,反转并连接。

myList = [1, 2, 3]
print(myList)  # [1, 2, 3]
listToReverse = myList.copy()
listToReverse.reverse()
myList += listToReverse
print(myList) # [1, 2, 3, 3, 2, 1]

答案 1 :(得分:1)

你正在从前面移除东西,添加到后面以及列表中的长度:这只是旋转的东西,导致相同的序列。

您可以对d.rotate(len(d))执行相同操作 - 但结果列表的顺序与以前相同:[1,2,3]-->[2,3,1]-->[3,1,2]-->[1,2,3]

使用

from collections import deque

def mirrDeque(d):
    c = deque(d)     #                     [1,2,3]
    c.reverse()      # reverse the copy    [3,2,1]
    c.extend(d)      # add the original    [3,2,1,1,2,3]
    c.rotate(len(d)) # rotate by len       [1,2,3,3,2,1]
    return c

k = deque([1,2,3,4])
print(mirrDeque(k))

输出:

deque([1, 2, 3, 4, 4, 3, 2, 1])