在Python中将堆栈推入另一个堆栈

时间:2018-11-23 18:19:46

标签: python stack push pop

我正在尝试将堆栈A的内容推入堆栈B。另外,我想保持两个堆栈的顺序。为此,我想使用堆栈C。我尝试通过以下函数进行操作:

class Stack:
    ...

    def pop(self):
        self.items.pop()
        self.topindex -= 1
        return self

    def some_func(A, B, C):
        for item in A.items:
            while A.topindex is not 0:
                A.push(A.pop(item), C)
        for items in C.items:
            while C.topindex is not 0:
                C.push(C.pop(item), B)
    ...

topindex是堆栈中最后一项的索引。 如果堆栈中有2个项目,则topindex将为2。

但是执行时会引发错误: TypeError:pop()接受1个位置参数,但给出了2个

我也尝试使用本文(Push a stack onto another stack)寻求帮助,但这对我也不起作用,主要是因为我对c#一无所知。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您没有提供完整的堆栈实现供我使用,但是Python的列表类型已经具有pop方法,因此您可以像堆栈一样使用它们。

>>> a = [1,2,3]
>>> b = []
>>> c = []
>>> while a:
    c.append(a.pop())


>>> c
[3, 2, 1]
>>> while c:
    b.append(c.pop())


>>> b
[1, 2, 3]
>>> a
[]
>>> c
[]

有更简单的方法来操作列表,但是以上就是仅使用push(append)/ pop来移动堆栈元素的方式。

您的堆栈实现应具有.append().pop()的等效项,并提供某种方法来判断是否结束while循环。