【问题标题】:queue items appear in their original order followed by a copy of the queue items in reverse order队列项目以其原始顺序出现,然后是队列项目的副本以相反的顺序出现
【发布时间】:2018-04-26 05:29:47
【问题描述】:

这是我的程序

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]

【问题讨论】:

    标签: python-3.x list queue


    【解决方案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])
    

    【讨论】:

    • 谢谢。我知道为什么我的代码不起作用。我做了一个 queue1 = Queue() 并将所有内容排入队列,然后将所有项目排入 orig_queue .. 现在它工作正常.. 谢谢
    【解决方案2】:

    您可以创建一个副本,将其反转并连接。

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

    【讨论】:

    • mylist = mylist + mylist[::-1]
    • 哈哈哈我知道我忘记了python的一些好处!
    • 你的代码真的很好..但我不知道为什么它给了我 [3,2,1,1,2,3]
    • @mini 好像你在反转myList,你可以试试@PatrickArtner 提供的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多