我正在尝试将堆栈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#一无所知。
非常感谢您的帮助。
答案 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循环。