当前位置:   article > 正文

python中的deque模块(collections的deque模块)_deque python

deque python

目录

1. deque是python的collections中的一个类

2.deque的简单使用以及它的方法

2.1 创建deque的方法

 2.2 创建deque时,并指定大小maxlen,即能装几个元素, 以及deque添加元素append()方法

2.3  deque的 appendleft()方法

2.4 deque的 clear()方法

2.5 deque的 copy()方法

2.6 deque的count方法

2.7 deque中的extend()方法

2.8 deque中的extendleft()方法

2.9 deque中的index方法

2.10 deque中的insert方法

2.11 deque中的pop方法

2.12 deque中的popleft方法

2.13 deque中的remove方法

2.14 deque中的reverse方法

2.15 deque中的rotate方法


1. deque是python的collections中的一个类

deque的对象像是一个列表,只不过可以固定这个deque对象的大小,以及列表是在队列的两端执行添加和弹出元素的操作,可以理解为,deque是一个双向的队列,

尽管你也可以手动在一个列表上实现这一的操作(比如增加、删除等等)。但是这里的队列方案会更加优雅并且运行得更快些。

以下是部分源码,以及部分方法:

  1. class deque(object):
  2. """
  3. deque([iterable[, maxlen]]) --> deque object
  4. A list-like sequence optimized for data accesses near its endpoints.
  5. """
  6. def append(self, *args, **kwargs): # real signature unknown
  7. """ Add an element to the right side of the deque. """
  8. pass
  9. def appendleft(self, *args, **kwargs): # real signature unknown
  10. """ Add an element to the left side of the deque. """
  11. pass
  12. def clear(self, *args, **kwargs): # real signature unknown
  13. """ Remove all elements from the deque. """
  14. pass
  15. def copy(self, *args, **kwargs): # real signature unknown
  16. """ Return a shallow copy of a deque. """
  17. pass
  18. def count(self, value): # real signature unknown; restored from __doc__
  19. """ D.count(value) -> integer -- return number of occurrences of value """
  20. return 0
  21. def extend(self, *args, **kwargs): # real signature unknown
  22. """ Extend the right side of the deque with elements from the iterable """
  23. pass
  24. def extendleft(self, *args, **kwargs): # real signature unknown
  25. """ Extend the left side of the deque with elements from the iterable """
  26. pass
  27. def index(self, value, start=None, stop=None): # real signature unknown; restored from __doc__
  28. """
  29. D.index(value, [start, [stop]]) -> integer -- return first index of value.
  30. Raises ValueError if the value is not present.
  31. """
  32. return 0
  33. def insert(self, index, p_object): # real signature unknown; restored from __doc__
  34. """ D.insert(index, object) -- insert object before index """
  35. pass
  36. def pop(self, *args, **kwargs): # real signature unknown
  37. """ Remove and return the rightmost element. """
  38. pass
  39. def popleft(self, *args, **kwargs): # real signature unknown
  40. """ Remove and return the leftmost element. """
  41. pass
  42. def remove(self, value): # real signature unknown; restored from __doc__
  43. """ D.remove(value) -- remove first occurrence of value. """
  44. pass
  45. def reverse(self): # real signature unknown; restored from __doc__
  46. """ D.reverse() -- reverse *IN PLACE* """
  47. pass
  48. def rotate(self, *args, **kwargs): # real signature unknown
  49. """ Rotate the deque n steps to the right (default n=1). If n is negative, rotates left. """
  50. pass

2.deque的简单使用以及它的方法

2.1 创建deque的方法

可以创建一个空的deque,也可以创建带数据的deque,这个数据,我们通过源码看,必须是一个可迭代的对象接口,列表,元组等等。

  1. from collections import deque
  2. # 创建一个空的deque
  3. data = deque()
  4. print(data)
  5. print("=" * 60)
  6. # 创建有数据的deque
  7. data1 = deque('abcd')
  8. print(data1)
  9. print("=" * 60)
  10. # 创建有数据的deque
  11. data2 = deque([1, 2, 3, 4])
  12. print(data2)
  13. print("=" * 60)

 2.2 创建deque时,并指定大小maxlen,即能装几个元素, 以及deque添加元素append()方法

  1. from collections import deque
  2. # 创建一个空的deque, 并指定最大的元素是3个
  3. data = deque(maxlen=3)
  4. data.append(1)
  5. data.append(2)
  6. data.append(3)
  7. print(data)
  8. data.append(4)
  9. print(data)

运行结果,我们可以看到,当新的元素加入并且这个队列已满的时候,最老的元素会自动被移除掉

 

2.3  deque的 appendleft()方法

从deque队列的左侧添加数据,append()就是默认就尾部即右侧添加数据

  1. from collections import deque
  2. data = deque('123')
  3. print(data)
  4. print("=" * 60)
  5. data.appendleft(0)
  6. print(data)

运行结果

  1. deque(['1', '2', '3'])
  2. ============================================================
  3. deque([0, '1', '2', '3'])

2.4 deque的 clear()方法

清空deque队列,让其变成空队列

  1. from collections import deque
  2. data = deque('123')
  3. print(data)
  4. print("=" * 60)
  5. data.clear()
  6. print(data)

运行结果

  1. deque(['1', '2', '3'])
  2. ============================================================
  3. deque([])

2.5 deque的 copy()方法

deque的copy方法相当于深拷贝,拷贝后的地址不相同,并且原来的值修改后,不会影响拷贝后的值。

  1. from collections import deque
  2. data1 = deque('123')
  3. print(data1)
  4. print("=" * 60)
  5. data2 = data1.copy()
  6. print(data2)
  7. print("地址比较")
  8. print("data1的地址", id(data1))
  9. print("data2的地址", id(data2))
  10. print("修改数据后,看变化")
  11. data1.append('4')
  12. print(data1)
  13. print("=" * 60)
  14. print(data2)

运行结果:

  1. deque(['1', '2', '3'])
  2. ============================================================
  3. deque(['1', '2', '3'])
  4. 地址比较
  5. data1的地址 2404465361192
  6. data2的地址 2404465361304
  7. 修改数据后,看变化
  8. deque(['1', '2', '3', '4'])
  9. ============================================================
  10. deque(['1', '2', '3'])

2.6 deque的count方法

count(value),获取deque队列中某个元素的个数

  1. from collections import deque
  2. data1 = deque('123333333')
  3. print(data1)
  4. print("=" * 60)
  5. count = data1.count('3')
  6. print(count)

运行结果:

  1. deque(['1', '2', '3', '3', '3', '3', '3', '3', '3'])
  2. ============================================================
  3. 7

2.7 deque中的extend()方法

两个队列合并,extend(value),  value的值可以是deque对象也可以是可迭代的对象,字符串,列表,元组等等

  1. from collections import deque
  2. data1 = deque('123')
  3. data2 = deque('456')
  4. data1.extend(data2)
  5. print(data1)

运行结果

deque(['1', '2', '3', '4', '5', '6'])

2.8 deque中的extendleft()方法

两个队列合并,从左侧合并,extendleft(value),  value的值可以是deque对象也可以是可迭代的对象,字符串,列表,元组等等

要注意。合并时候,value的值,也是反着来的,注意看下面的打印,从左侧开始往里面加

  1. from collections import deque
  2. data1 = deque('123')
  3. data1.extendleft('456')
  4. print(data1)

运行结果:

deque(['6', '5', '4', '1', '2', '3'])

2.9 deque中的index方法

index(value,start=None,end=None),  怎么使用请看代码

  1. from collections import deque
  2. data1 = deque('helloword')
  3. print(data1.index('o')) # 有多个的话,取第一个的索引位置
  4. print(data1.index('o', 5)) # 从第五个开始(索引从0开始)
  5. print(data1.index('o', 5, 8)) # 从第五个开始 -- 第八个结束

运行结果:

  1. 4
  2. 6
  3. 6

2.10 deque中的insert方法

insert(index,value), 在index位置上,插入value值,   注意顺序

  1. from collections import deque
  2. data1 = deque('helloword')
  3. data1.insert(0, '1') # 在第一个位置上插入 1
  4. data1.insert(0, '2') # 在第一个位置上插入 2
  5. data1.insert(0, ['123']) # 在第一个位置上插入 列表123
  6. print(data1)

运行结果:

deque([['123'], '2', '1', 'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'd'])

2.11 deque中的pop方法

pop() 方法弹出元素,从尾部弹出,并且返回弹出的这个元素

  1. from collections import deque
  2. data1 = deque('12345')
  3. print(data1.pop()) # 弹出元素,从右侧即末尾弹出,并返回
  4. print(data1.pop()) # 弹出元素,从右侧即末尾弹出,并返回
  5. print(data1)

2.12 deque中的popleft方法

popleft() 方法弹出元素,从头部弹出,并且返回弹出的这个元素

在队列两端插入或删除元素时间复杂度都是 O(1) ,而在列表的开头插入或删除元 素的时间复杂度为 O(N) 。

  1. from collections import deque
  2. data1 = deque('12345')
  3. print(data1.popleft()) # 弹出元素,从左侧侧即头部弹出,并返回
  4. print(data1.popleft()) # 弹出元素,从左侧侧即头部弹出,并返回
  5. print(data1)

2.13 deque中的remove方法

remove(value)方法,将deque队列某个元素进行移除

  1. from collections import deque
  2. data1 = deque('12345')
  3. data1.remove('1')
  4. print(data1)

2.14 deque中的reverse方法

reverse()方法,将deque队列进行反转

  1. from collections import deque
  2. data1 = deque('12345')
  3. data1.reverse()
  4. print(data1)
  1. deque(['5', '4', '3', '2', '1'])
  2. Process finished with exit code 0

2.15 deque中的rotate方法

rotate(n)   ,  将队列 向右旋转n步(默认n=1)。如果n为负,则向左旋转。

  1. from collections import deque
  2. data1 = deque('12345')
  3. data1.rotate(3)
  4. print(data1)
  5. data1.rotate(-3)
  6. print(data1)
  1. deque(['3', '4', '5', '1', '2'])
  2. deque(['1', '2', '3', '4', '5'])

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/538487
推荐阅读
相关标签
  

闽ICP备14008679号