前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python:collections模块之deque双向队列

python:collections模块之deque双向队列

作者头像
雷子
发布2023-10-30 15:13:11
1720
发布2023-10-30 15:13:11
举报

deque,是双向队列,是一种高性能的数据结构之一.它的操作类似于列表list,但比list拥有更低的时间复杂度和空间复杂度。

代码语言:javascript
复制
from collections import deque
deque1 = deque([1, 2, 3, 4])
print(deque1)

结果打印:

代码语言:javascript
复制
deque([1, 2, 3, 4])

1、 append方法

list的append方法一样,都是从末尾(队尾)添加元素

代码语言:javascript
复制
deque1.append(5)
print(deque1)

结果:

代码语言:javascript
复制
deque([1, 2, 3, 4, 5])

2 appendleft方法

该方法是从队首插入元素,虽然list的insert(0, obj)也能实现该效果,但性能不如该方法

代码语言:javascript
复制
deque1.appendleft(6)
print(deque1)
代码语言:javascript
复制
结果输出:
deque([6, 1, 2, 3, 4, 5])

3 clear方法

该方法和list的clear方法一样,都是清空里面的所有元素。

代码语言:javascript
复制
deque1.clear()
print(deque1)

结果;

代码语言:javascript
复制
deque([])

4.count方法

该方法和list的count方法一样,返回队列中包含value的个数

代码语言:javascript
复制
print(deque1.count(4))

结果;

代码语言:javascript
复制
0

5 extend方法

代码语言:javascript
复制
deque1.extend({1:3})
print(deque1)

结果:

代码语言:javascript
复制
deque([1])

6 extendleft方法

作用和extend一样,只不过该方法是在队首开始扩展,而extend是在队尾进行扩展

代码语言:javascript
复制
deque1.extendleft([5])
print(deque1)

结果:

代码语言:javascript
复制
deque([5])

7 pop方法

该方法和list的pop方法一样,用于删除末尾的元素

代码语言:javascript
复制
from collections import deque
deque1 = deque([1, 2, 3, 4])
deque1.pop()
print(deque1)

结果;

代码语言:javascript
复制
deque([1, 2, 3])

8 popleft方法

作用和pop一样,只不过该方法是从队首删除元素,而pop是从队尾删除元素。和list的pop(0)效果一致。

代码语言:javascript
复制
from collections import deque
deque1 = deque([1, 2, 3, 4])
deque1.popleft()
print(deque1)

结果:

代码语言:javascript
复制
deque([2, 3, 4])

9 remove方法

该方法和list的remove方法一样,用于删除第一次出现的元素。当然,被删除的元素不存在则会报错

代码语言:javascript
复制
from collections import deque
deque1 = deque([1, 2, 3, 4])
deque1.remove(1)
print(deque1)
deque1.remove(100)

结果;

代码语言:javascript
复制
 deque([2, 3, 4])
    deque1.remove(100)
ValueError: deque.remove(x): x not in deque

10 reverse方法

该方法和list的reverse方法一样,用于元素反转

代码语言:javascript
复制
from collections import deque
deque1 = deque([1, 2, 3, 4])
deque1.reverse()
print(deque1)

结果:

代码语言:javascript
复制
deque([4, 3, 2, 1])

11 rotate方法

对队列内的元素进行移动

代码语言:javascript
复制
from collections import deque
deque1 = deque([1, 2, 3, 4])
deque1.rotate(1)
print(deque1)

结果:

代码语言:javascript
复制
deque([4, 1, 2, 3])

这里是将队列向右移动一个单位,最后一个元素移到了最前面,其余的元素按顺序依次右移

代码语言:javascript
复制
from collections import deque
deque1 = deque([1, 2, 3, 4])
deque1.rotate(3)
print(deque1)

结果:

代码语言:javascript
复制
deque([2, 3, 4, 1])

那么在测试用,使用场景有哪些

代码语言:javascript
复制
#1.测试用例排序
from collections import deque

deque1=deque()
deque1.append("login")
deque1.append("login2")

for i in deque1:
     print(i)
代码语言:javascript
复制
代码语言:javascript
复制
使用场景2、多设备并发执行,多线程之间相互取数据
from multiprocessing import Pool
def case(phone,url):
    print(phone)
def run_mu(caseqeue, iphonequeue, pool):
    while True:
        try:
            url = caseqeue.popleft()
            phone = iphonequeue.popleft()
            pool.apply_async(func=case,
                            args=(phone,url))
            iphoneques.append(phone)
        except IndexError as e:
            pool.close()
            pool.join()
            break
if __name__ == '__main__':

    iphoneques=deque()
    iphoneques.append("beijingphone1")
    iphoneques.append("shanghaiphone2")
    caseqeue=deque()
    for i in range(10):
        caseqeue.append(caseqeue)
    phone_pool = Pool(2)
    start_thding = threading.Thread(target=run_mu, args=(caseqeue,
                                                                 iphoneques,
                                                                 phone_pool))
    start_thding.run()
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档