Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中列表反转的奇怪性能_Python_List - Fatal编程技术网

Python中列表反转的奇怪性能

Python中列表反转的奇怪性能,python,list,Python,List,我运行这个脚本,我不明白列表反转是如何工作的 class Queue: def __init__(self): self._push_stack = list() self._pop_stack = list() def push(self, x): self._push_stack.append(x) self._pop_stack.append(x) self._pop_stack.rever

我运行这个脚本,我不明白列表反转是如何工作的

class Queue:
    def __init__(self):
        self._push_stack = list()
        self._pop_stack = list()


    def push(self, x):
        self._push_stack.append(x)
        self._pop_stack.append(x)
        self._pop_stack.reverse()
        print(self._push_stack, self._pop_stack) # debugging


    def pop(self):
        if len(self._pop_stack) == 0:
            raise IndexError("pop from an empty queue")
        else:
            self._push_stack.pop()
            return self._pop_stack.pop()


queue = Queue()
queue.push(3)
queue.push(5)
queue.push(7)
queue.push(9)
print(queue.pop())
print(queue.pop())
print(queue.pop())
print(queue.pop())
此脚本的输出为:

[3] [3]
[3, 5] [5, 3]
[3, 5, 7] [7, 3, 5]
[3, 5, 7, 9] [9, 5, 3, 7]
7
3
5
9
我不明白的是,为什么
[3,5,7]
,当颠倒过来时,是
[7,3,5]
,而不是
[7,5,3]
;为什么
[3,5,7,9]
反向时是
[9,5,3,7]
,而不是
[9,7,5,3]


PS请忽略脚本的其他缺点。

每次都会反转弹出堆栈,这很糟糕。第二次推送后,您有
[5,3]
,然后追加7,留下
[5,3,7]
,然后将其反转,得到
[7,3,5]


您不需要每次都反转,有关如何正确实现逻辑的解释,请参阅答案。

您在追加操作后的每次迭代中都反转列表,这会导致列表在追加7之前被反转,然后被反转。

这是因为您没有反转
[3,5,7]
但是
[5,3,7]
如果你仔细查看你的代码,你每次推送一个项目时都会反转弹出堆栈。相反,您应该准备:

而不是

self._pop_stack.append(x)
self._pop_stack.reverse()
您可以使用:
self.\u pop\u stack.insert(0,x)

在添加每个元素后,您正在反转
pop\u stack
的顺序-这会导致一些非常奇怪的元素顺序您尝试调试代码了吗?我不知道您想要什么解释,奇怪的代码和调试输出尚未演示。您不断翻转
self.\u pop\u stack
,因此它以一种奇怪的顺序结束。忽略脚本的其他缺点会忽略这种行为的原因在第二次迭代之后,您有了
推送:[3,5]弹出:[5,3]
。然后在每个列表中添加7,这样就有了
推送:[3,5,7]弹出:[5,3,7]
。然后你反转
pop
,这样你就有了
push:[3,5,7]pop:[7,3,5]
。调试输出已经告诉您这一点。