zoukankan      html  css  js  c++  java
  • collections之deque【双向队列】与Queue【单向队列】

    今天来向大家介绍两个队列,一个是deque,双向队列,另外一个是Queue,单向队列,队列和堆栈不同,队列为先进先出,大家还需要注意一下,双向队列为collections模块中的类,而Queue为queue模块中的类,大家不要被我博客的标题干扰;

    下面先来介绍一下双向对象deque

    1、创建一个deque【双向队列】,同样,我们肯定要先import colles模块

    import collections
    
    #deque为collections中的双向队列,是先进先出,和堆栈正好相反
    obj = collections.deque()
    print(type(obj))
    # <class 'collections.deque'>
    

    2、append方法,是在队列的右边添加一个元素,每次后面添加的元素就会被放到最右边

    obj.append("1")
    obj.append("2")
    print(obj)
    # deque(['1', '2'])
    

    3、appendleft方法,是在队列的左边添加一个元素,每次后面添加的元素就会被放在最左边

    obj.appendleft("a")
    obj.appendleft("b")
    print(obj)
    # deque(['b', 'a', '1', '2'])
    

    4、clear方法,可以清空deque

    print(obj)
    # deque(['b', 'a', '1', '2'])
    obj.clear()
    print(obj)
    # deque([])
    

    5、count方法,可以统计deque中某个元素出现的次数,如果该元素不存在,则次数为0

    print(obj)
    # deque(['b', 'a', '1', '2', '2'])
    r = obj.count("2")
    print(r)
    # 2
    r = obj.count("c")
    print(r)
    # 0
    

    6、前面介绍的append方法一次只能添加一个元素,这里的extend方法可以一次添加多个元素到deque中,同样,肯定是添加的deque中的最右边

    print(obj)
    # deque(['b', 'a', '1', '2', '2'])
    l1 = ["a","b","c"]
    obj.extend(l1)
    print(obj)
    # deque(['b', 'a', '1', '2', '2', 'a', 'b', 'c'])
    

    7、extendleft是一次可以添加多个元素到deque中,同样,肯定是添加到deque的最左边

    print(obj)
    # deque(['b', 'a', '1', '2', '2', 'a', 'b', 'c'])
    l1 = ["a","b","c"]
    obj.extendleft(l1)
    print(obj)
    # deque(['c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a', 'b', 'c'])
    

    8、index方法,可以获取某个元素在queue中的索引,同样,如果该元素在deque中出现多次,则只会得到最左边的该元素的索引

    print(obj)
    # deque(['c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a', 'b', 'c'])
    r = obj.index("b")
    print(r)
    
    # 1
    

    9、insert方法,在指定的索引的位置插入元素

    print(obj)
    # deque(['c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a', 'b', 'c'])
    obj.insert(0,"0")
    print(obj)
    
    # deque(['0', 'c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a', 'b', 'c'])
    

    10、pop方法,从右边开始删除deque中的元素,同样,我们也可以接受到被删除的元素

    print(obj)
    # deque(['0', 'c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a', 'b', 'c'])
    r = obj.pop()
    print(r)
    # c
    print(obj)
    # deque(['0', 'c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a', 'b'])
    r = obj.pop()
    print(r)
    # b
    print(obj)
    # deque(['0', 'c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a'])
    

    11、popleft,从左边开始删除deque中的元素,同样,我们可以接受到被删除的元素

    print(obj)
    # deque(['0', 'c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a'])
    r = obj.popleft()
    print(r)
    # 0
    print(obj)
    # deque(['c', 'b', 'a', 'b', 'a', '1', '2', '2', 'a'])
    r = obj.popleft()
    print(r)
    # c
    print(obj)
    # deque(['b', 'a', 'b', 'a', '1', '2', '2', 'a'
    

    12、remove方法,可以删除指定的元素,同样如果deque中存在多个该元素,则只会删除最左边的那个元素

    # obj.remove() 删除指定的元素,如果deque中有多个相同的元素,则只会删除从左边开始的第一个碰到元素
    print(obj)
    # deque(['b', 'a', 'b', 'a', '1', '2', '2', 'a'])
    obj.remove("b")
    print(obj)
    # deque(['a', 'b', 'a', '1', '2', '2', 'a'])
    

     

    13、reverse方法,可以实现反转deque

    print(obj)
    # deque(['a', 'b', 'a', '1', '2', '2', 'a'])
    obj.reverse()
    print(obj)
    # deque(['a', '2', '2', '1', 'a', 'b', 'a'])
    

    14、rotate方法,可以实现收尾相连,rotate方法可以带一个数字,如果没有带任何参数,则默认把最右边的元素放在左边,如果带了参数,如果为2,则先把最右边的元素放在最左边,然后在把最右边的元素放在最左边

    print(obj)
    # deque(['a', '2', '2', '1', 'a', 'b', 'a'])
    obj.rotate()
    print(obj)
    # deque(['a', 'a', '2', '2', '1', 'a', 'b'])
    obj.rotate(2)
    print(obj)
    # deque(['a', 'b', 'a', 'a', '2', '2', '1'])
    

    上面我们就把deque的方法介绍完了,下面我们来介绍一下Queue类

    需要特别强调,Queue的类来在queue模块,而不是collections模块,Queue也就是我们所说的单向队列

    1、创建一个Queue,需要先import queue模块,例子中参数4为该Queue最多可以存放4个元素

    import queue
    obj = queue.Queue(4)
    print(type(obj))
    # <class 'queue.Queue'>
    

    2、put方法,给Queue中增加元素

    obj.put("a")
    obj.put("b")
    obj.put("c")
    obj.put("d")
    print(obj)
    # <queue.Queue object at 0x01B231D0>
    

    3、qsize方法,统计Queue的长度

    r = obj.qsize()
    print(r)
    # 4
    

    4、get方法,从Queue的最右边取元素,取出一个元素,则Queue的长度会减1

    r = obj.get()
    print(r)
    # a
    r = obj.get()
    print(r)
    # b
    r = obj.qsize()
    print(r)
    # 2
    

    5、full方法,查看Queue队列是否满,也就是我们在创建Queue的时候可以带一个参数,这个参数就是这个队列的最大长度

    r = obj.qsize()
    print(r)
    # 2
    r = obj.full()
    print(r)
    # False
    obj.put("a")
    obj.put("b")
    r = obj.full()
    print(r)
    # True
    

    6、empty方法,如果Queue为空,则返回True,如果不为空,则返回False

    r = obj.qsize()
    print(r)
    # 4
    print(obj.empty())
    # False
    
    obj_empty = queue.Queue()
    r = obj_empty.qsize()
    print(r)
    # 0
    print(obj_empty.empty())
    # True
    

      

  • 相关阅读:
    python高级编程
    django笔记
    sublime ide
    python3 django mysql
    python win
    linux时区设置
    在实际应用中如何实现切圆角的功能
    display和visiblity在应用中使用哪个好
    看懂UML类图和时序图
    解决Xcode7.2真机调试出现:The account “” has no team with ID “”
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/6517493.html
Copyright © 2011-2022 走看看