• 技术文章 >Python技术 >Python高级

    使用Python实现一个堆栈结构

    PythonPython2019-06-10 09:37:15原创3067
    什么是堆栈?

    堆栈是一个数据结构,其存储在一个后进/先出的方式的项目。这通常被称为LIFO。这与队列形成对比,队列以先入/先出(FIFO)方式存储项目。


    使用list创建一个Python堆栈

    list您可能经常在程序中使用的内置结构可用作堆栈。相反的.push(),你可以使用.append()新的元素添加到您的堆栈的顶部,同时.pop()除去了LIFO顺序的元素:

    >>> myStack = []
    >>> myStack.append('a')
    >>> myStack.append('b')
    >>> myStack.append('c')
    >>> myStack
    ['a', 'b', 'c']
    >>> myStack.pop()
    'c'
    >>> myStack.pop()
    'b'
    >>> myStack.pop()
    'a'
    >>> myStack.pop()
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
    IndexError: pop from empty list

    你可以在最后的命令中看到,如果你调用空堆栈,list它将引发一个。IndexError.pop()

    list有熟悉的优点。你知道它是如何工作的,并且可能已经在你的程序中使用它了。

    不幸的是,list与其他数据结构相比,您会看到一些缺点。问题是随着它的发展,它会遇到速度问题。list存储a 中的项目的目的是提供对中的随机元素的快速访问list。在较高级别,这意味着项目在内存中彼此相邻存储。

    如果你的堆栈比当前拥有它的内存块大,那么Python需要做一些内存分配。这可能导致一些.append()呼叫比其他呼叫花费更长的时间。

    还有一个不太严重的问题。如果您使用.insert()在末尾以外的位置向堆栈添加元素,则可能需要更长时间。但是,这通常不是你要对堆栈做的事情。

    下一个数据结构将帮助您解决您看到的重新分配问题list。

    使用collections.deque创建一个Python堆栈

    该collections模块包含deque,这对于创建Python堆栈很有用。deque发音为“deck”,代表“双端队列”。

    您可以使用同样的方法deque,你上面看到的list,.append()和.pop():

    >>> from collections import deque
    >>> myStack = deque()
    >>> myStack.append('a')
    >>> myStack.append('b')
    >>> myStack.append('c')
    >>> myStack
    deque(['a', 'b', 'c'])
    >>> myStack.pop()
    'c'
    >>> myStack.pop()
    'b'
    >>> myStack.pop()
    'a'
    >>> myStack.pop()
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
    IndexError: pop from an empty deque

    这看起来几乎与list上面的例子相同。此时,您可能想知道为什么Python核心开发人员会创建两个看起来相同的数据结构。

    专题推荐:python
    品易云
    上一篇:Python中的描述符 下一篇:Python中有指针吗?

    相关文章推荐

    • 深究Python中的asyncio库-shield函数• 详解Python元类(metaclass)• python几个__开头的方法解释

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网