stack = ["1", "2", "3"]
stack.append("4")
stack.append("6")
stack.pop()
print (stack)
这通常是我制作的方式,但我在这里看到其他类型的例子,并且无法判断我是否做得对。任何言论?
答案 0 :(得分:0)
这是来自官方文档: https://docs.python.org/3/tutorial/datastructures.html
5.1.1。使用列表作为堆栈 列表方法使得将列表用作堆栈变得非常容易,其中添加的最后一个元素是检索到的第一个元素(“后进先出”)。要将项添加到堆栈顶部,请使用append()。要从堆栈顶部检索项目,请使用不带显式索引的pop()。例如:
>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]
答案 1 :(得分:0)
你不是这样“堆叠”。
在您的示例中,您使用list
实例作为堆栈,只需限制允许的方法数。这有点像在眼睛上蒙上眼睛,假装你是盲目的。
stack[i]
和stack.insert(i, x)
。但type(stack)
仍会返回<class 'list'>
:
>>> stack = ["1", "2", "3"]
>>> stack.append("4")
>>> stack.append("6")
>>> stack.pop()
'6'
>>> stack
['1', '2', '3', '4']
>>> type(stack)
<class 'list'>
所以这种方式并不可靠,因为没有什么可以阻止你在堆栈上调用list
实例方法:
>>> stack.insert(0,'0')
>>> stack
['0', '1', '2', '3', '4']
如果您想限制stack
对象可用的方法数量,可以围绕Stack
编写list
包装:
class Stack:
def __init__(self, items=[]):
self.items = items
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
def size(self):
return len(self.items)
def __str__(self):
return str(self.items)
stack = Stack(["1", "2", "3"])
stack.push("4")
stack.push("6")
stack.pop()
print(stack)
# ['1', '2', '3', '4']
stack.insert(0, '0')
# AttributeError: Stack instance has no attribute 'insert'