网淘巴来吧,欢迎您!

返回首页 微信
微信
手机版
手机版

Python list列表实现栈和队列

2021-05-16 新闻来源:网淘巴 围观:688
''

栈和队列是两种基本的数据结构,同为容器类型。两者区别如下:

stack: 后进先出

queue:先进先出

考虑到 list 类型数据本身的存放就是有顺序的,而且内部元素又可以是各不相同的类型,非常适合用于队列和栈的实现。本节将演示如何使用 list 类型变量来实现队列和栈。

Python list实现队列

使用 list 列表模拟队列功能的实现方法是,定义一个 list 变量,存入数据时使用 insert() 方法,设置其第一个参数为 0,即表示每次都从最前面插入数据;读取数据时,使用 pop() 方法,即将队列的最后一个元素弹出。

如此 list 列表中数据的存取顺序就符合“先进先出”的特点。实现代码如下:

  1.  
    #定义一个空列表,当做队列
  2.  
    queue = []
  3.  
    #向列表中插入元素
  4.  
    queue.insert(0,1)
  5.  
    queue.insert(0,2)
  6.  
    queue.insert(0,"hello")
  7.  
    print(queue)
  8.  
    print("取一个元素:",queue.pop())
  9.  
    print("取一个元素:",queue.pop())
  10.  
    print("取一个元素:",queue.pop())

运行结果为:

  1.  
    ['hello', 2, 1]
  2.  
    取一个元素: 1
  3.  
    取一个元素: 2
  4.  
    取一个元素: hello

Python list实现栈

使用 list 列表模拟栈功能的实现方法是,使用 append() 方法存入数据;使用 pop() 方法读取数据。

append() 方法向 list 中存入数据时,每次都在最后面添加数据,这和前面程序中的 insert() 方法正好相反。

举个例子:

  1.  
    #定义一个空 list 当做栈
  2.  
    stack = []
  3.  
    stack.append(1)
  4.  
    stack.append(2)
  5.  
    stack.append("hello")
  6.  
    print(stack)
  7.  
    print("取一个元素:",stack.pop())
  8.  
    print("取一个元素:",stack.pop())
  9.  
    print("取一个元素:",stack.pop())

输出结果为:

  1.  
    [1, 2, 'hello']
  2.  
    取一个元素: hello
  3.  
    取一个元素: 2
  4.  
    取一个元素: 1

collections模块实现栈和队列

前面使用 list 实现队列的例子中,插入数据的部分是通过 insert() 方法实现的,这种方法效率并不高,因为每次从列表的开头插入一个数据,列表中所有元素都得向后移动一个位置。

这里介绍一个相对更高效的方法,即使用标准库的 collections 模块中的 deque 结构体,它被设计成在两端存入和读取都很快的特殊 list,可以用来实现栈和队列的功能。

举个例子:

  1.  
    queueAndStack = deque()
  2.  
    queueAndStack.append(1)
  3.  
    queueAndStack.append(2)
  4.  
    queueAndStack.append("hello")
  5.  
    print(list(queueAndStack))
  6.  
     
  7.  
    #实现队列功能,从队列中取一个元素,根据先进先出原则,这里应输出 1
  8.  
    print(queueAndStack.popleft())
  9.  
    #实现栈功能,从栈里取一个元素,根据后进先出原则,这里应输出 hello
  10.  
    print(queueAndStack.pop())
  11.  
    #再次打印列表
  12.  
    print(list(queueAndStack))
     
    输出结果为:
[1, 2, 'hello']
  1.  
    1
  2.  
    hello
  3.  
    [2]
免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏

本文链接:https://www.wtao8.com/post/98.html 转载需授权!

分享到:

相关文章

龙年
大发