【问题标题】:I'm kinda confused on how to make a stack. Is this way reliable?我对如何制作堆栈有点困惑。这种方式靠谱吗?
【发布时间】:2026-01-24 09:25:02
【问题描述】:
stack = ["1", "2", "3"]
stack.append("4")
stack.append("6")
stack.pop()
print (stack)

这通常是我制作的方法,但我在这里看到了其他类型的示例,无法判断我是否做得对。有什么解释吗?

【问题讨论】:

标签: python stack


【解决方案1】:

这是来自官方文档: https://docs.python.org/3/tutorial/datastructures.html

5.1.1。将列表用作堆栈
list 方法可以很容易地将列表用作堆栈,其中添加的最后一个元素是检索到的第一个元素(“后进先出”)。要将项目添加到堆栈顶部,请使用 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]  

【讨论】:

    【解决方案2】:

    您不会以这种方式“堆叠”。

    在您的示例中,您将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 对象可用的方法数量,您可以在list 周围编写一个Stack 包装器:

    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'
    

    【讨论】:

    • 哦,好的。谢谢!
    最近更新 更多