关于 Python deque 模块的使用

python deque 支持的操作

https://my.oschina.net/u/4344754/blog/3411133
根据上文,可以大致理解 deque 模块的底层实现原理。

deque 支持多种操作:
创建一个新的空队列:

# 创建空的队列
d1 = deque()
print(d1)   # deque([]) 

创建已经存在元素的队列:

# 创建已经存在元素的对象:从 iterable (迭代对象) 数据创建。如果 iterable 没有指定,新队列为空。
d = deque("pig")
print(d)    # deque(['p', 'i', 'g']) 

创建指定最大长度的队列:

# 创建指定最大长度的队列
d = deque(maxlen=10)
for i in range(1, 101):
    try:
        d.append(i)
        # print(d)
    except:
        traceback.print_exc()
        break

print(d)
# deque([91, 92, 93, 94, 95, 96, 97, 98, 99, 100], maxlen=10) 

指定长度后,进行 append,超出最大长度,后面的元素会将前面的元素从左推出。

从右边添加元素:

# 从最右边添加元素
d = deque()
d.append({"what": "apple"})
print(d)

从左边添加元素:

# 从左边添加元素
d = deque()
for i in (1, 2, 3):
    d.appendleft(i)
print(d)

创建一份浅拷贝:

# 创建一份浅拷贝
d = deque([[1, 2, 3], "apple", 'ruiyang'])
dd = d.copy()
print(id(d))   # 4383179616 
print(id(dd))  # 4383831440 
d[0].append(4)
print(d)  # deque([[1, 2, 3, 4], 'apple', 'ruiyang']) 
print(dd)  # deque([[1, 2, 3, 4], 'apple', 'ruiyang']) 

计算队列中等于某个值的个数:

# 计算队列中等于某个值的个数
d = deque([[1, 2, 3], "apple", 'ruiyang', 'apple'])
print(d.count("apple"))

通过 extend 进行右向扩展:

# extend(iterable) 扩展deque的右侧,通过添加iterable参数中的元素。
d = deque("ruiyang")
d.extend(["a", "b", "c"])
print(d)

通过 extendleft 进行左向扩展:

# extendleft(iterable)
# 扩展deque的左侧,通过添加iterable参数中的元素。注意,左添加时,在结果中iterable参数中的顺序将被反过来添加。
d.extendleft(['e', 'f', 'g'])
print(d)

通过 insert 进行插入:

# insert(i, x): 在位置 i 插入 x 。如果插入会导致一个限长 deque 超出长度 maxlen 的话,就引发一个 IndexError
d9 = deque("1234567890", maxlen=11)
d9.insert(0, {"index": 100})
print(d9)
# Deque的最大尺寸,如果没有限定的话就是 None 。
print(d9.maxlen)
print(len(d9))
try:
    d9.insert(0, "666")
except IndexError:
    print("长度超出")

通过 pop 从右边弹出元素:

# pop() 移去并且返回一个元素,deque 最右侧的那一个。 如果没有元素的话,就引发一个 IndexError
d = deque("ruiyang")
while True:
    try:
        print(d.pop())
    except:
        traceback.print_exc()
        break
    time.sleep(1)

popleft 从左边弹出:

# popleft() 移去并且返回一个元素,deque 最左侧的那一个。 如果没有元素的话,就引发 IndexError。
d = deque("ruiyang")
while True:
    try:
        print(d.popleft())
    except:
        traceback.print_exc()
        break
    time.sleep(1)

通过 remove 移除元素:

# remove(value) 移除找到的第一个 value。 如果没有的话就引发 ValueError。
d = deque("ruiyang")
d.remove('g')
print(d)

try:
    d.remove("o")
except:
    traceback.print_exc()

通过 reverse 进行逆序:

# reverse() 将deque逆序排列。返回 None 。
d = deque("ruiyang")
print("***** ", d)
d.reverse()
print("##### ", d)

通过 rotate 进行循环:

# rotate(n=1) 向右循环移动 n 步。 如果 n 是负数,就向左循环。
# 如果deque不是空的,向右循环移动一步就等价于 d.appendleft(d.pop()) , 向左循环一步就等价于 d.append(d.popleft()) 。
d = deque("ruiyang")
print(">>>1", d)
d.rotate(1)
print(">>>2", d)

通过 clear 清空全部的元素:

# 移除全部的元素 使其长度为 0
d = deque("ruiyang")
print(d)
d.clear()
print(d)

除了以上操作,deque 还支持迭代、封存、len(d)、reversed(d)、copy.copy(d)、copy.deepcopy(d)、
成员检测运算符 in 以及下标引用例如通过 d[0] 访问首个元素等。 索引访问在两端的复杂度均为 O(1) 但在中间则会低至 O(n)。
如需快速随机访问,请改用列表。

d = deque("ruiyang")
print(len(d))

for one in d:
    print(one)

for one in reversed(d):
    print(one)

import copy
d.appendleft([1, 2, 3])
d1 = copy.deepcopy(d)
d[0].append(4)
print(d)
print(d1)

print("r" in d)
Python中的deque是一个双端队列,它可以在队列的两端进行插入和删除操作。deque可以通过从collections模块中导入来使用。引用展示了deque的一些常见操作。通过copy()方法可以创建一个deque的副本。reverse()方法可以将deque队列进行反转。rotate方法可以将deque队列中的元素向右循环移动指定的步数。引用展示了如何使用reverse()方法和rotate()方法。另外,引用提到,使用deque代替list可以提高性能,特别是在频繁地从队列的头部进行删除操作时,deque.popleft()的效率比list.pop(0)高。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [python中的deque模块(collections的deque模块)](https://blog.csdn.net/wei18791957243/article/details/126891658)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Python:【基础语法】 deque()用法](https://blog.csdn.net/zqx951102/article/details/128208737)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值