python:collections模块之deque双向队列

2023-10-30 15:13:11 浏览数 (1)

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()

0 人点赞