Python python对象 deque

该博客为转载内容,转载自https://www.cnblogs.com/pickKnow/p/10937810.html ,涉及Python相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# deque对象
'''
class collections.deque([ iterable [,maxlen ] ] )
返回一个从左到右(使用append())初始化的新deque对象,其中包含来自iterable的数据。如果未指定iterable,则新的deque为空。

Deques是堆栈和队列的概括(名称发音为“deck”,是“双端队列”的缩写)。Deques支持线程安全,内存有效的附加和从双端队列的弹出,在任一方向上具有大致相同的O(1)性能。

尽管list对象支持类似的操作,但它们针对快速固定长度操作进行了优化,并且导致O(n)内存移动成本pop(0)和操作,这些成本 改变了底层数据表示的大小和位置。insert(0, v)

如果未指定maxlenNone,则deques可能会增长到任意长度。否则,双端队列限制为指定的最大长度。一旦有界长度双端队列已满,当添加新项目时,从对方端丢弃相应数量的项目。有界长度deques提供类似于tailUnix中的过滤器的功能。它们还可用于跟踪仅涉及最近活动的事务和其他数据池。

Deque对象支持以下方法:

append(x )
将x添加到双端队列的右侧。

appendleft(x )
将x添加到双端队列的左侧。

clear()
删除deque中的所有元素,使其长度为0。

copy()
创建双端队列的浅表副本。

版本3.5中的新功能。

count(x )
计算deque元素的数量等于x。

版本3.2中的新功能。

extend(可迭代的)
通过附加可迭代参数中的元素来扩展双端队列的右侧。

extendleft(可迭代的)
通过附加来自iterable的元素来扩展双端队列的左侧。注意,左边追加的系列会导致反转迭代参数中元素的顺序。

index(x [,start [,stop ] ] )
返回deque 中x的位置(在索引开始时或 索引停止之前)。返回第一个匹配或ValueError如果未找到则引发 。

版本3.5中的新功能。

insert(i,x )
将x插入位置i的双端队列中。

如果插入会导致有界双端超过maxlen,IndexError则会引发a。

版本3.5中的新功能。

pop()
从双端队列的右侧移除并返回一个元素。如果没有元素,则提出一个IndexError。

popleft()
从双端队列的左侧移除并返回一个元素。如果没有元素,则提出一个IndexError。

remove(值)
删除第一次出现的值。如果没有找到,提出一个 ValueError。

reverse()
在原位反转deque的元素然后返回None。

版本3.2中的新功能。

rotate(n = 1 )
向右旋转deque n步。如果n为负数,则向左旋转。

当双端队列不为空时,向右d.appendleft(d.pop())旋转一步相当于,向左旋转一步相当于d.append(d.popleft())。

Deque对象还提供一个只读属性:

maxlen
一个双端队列的最大大小或None无边界。

'''
from collections import deque

var = deque(['shanghai','beijing','shenzhen','guangzhou'])

# 队列遵从先进先出的原则,在设定maxlen 的情况下,后进去的会将先进去的挤出去
de = deque(maxlen=4)
print(de.maxlen) #4

de.append("Tom")
de.append("Sarah")
de.append("Tony")
de.append("Jim")
de.append("Charles")
print(de)

 

转载于:https://www.cnblogs.com/pickKnow/p/10937810.html

### Python 中 `deque` 的用法与实例 #### 什么是 `deque`? `deque` 是 Python 标准库中的一个双端队列容器,位于模块 `collections` 下。它支持从两端高效地添加或移除元素,适用于需要频繁操作列表头尾的情况。 以下是关于 `deque` 的一些基本概念和常见用法: --- #### 初始化 `deque` 可以通过单个可迭代对象初始化 `deque`[^3]: ```python from collections import deque iterable = "123" q = deque(iterable) print(q) # 输出: deque(['1', '2', '3']) ``` 还可以指定最大长度来创建具有固定大小的 `deque`: ```python d = deque(maxlen=3) d.append(1) d.append(2) d.append(3) print(d) # 输出: deque([1, 2, 3], maxlen=3) d.append(4) # 当超出最大长度时,左侧自动弹出最早的数据 print(d) # 输出: deque([2, 3, 4], maxlen=3) ``` --- #### 添加元素到 `deque` 可以使用 `.append()` 方法向右侧添加元素,或者使用 `.appendleft()` 向左侧添加元素: ```python dq = deque() # 右侧添加 dq.append('a') dq.append('b') # 左侧添加 dq.appendleft('c') print(dq) # 输出: deque(['c', 'a', 'b']) ``` --- #### 移除元素 可以从两侧删除元素并返回被删除的值: ```python dq = deque(['a', 'b', 'c']) # 删除右侧最后一个元素 right_element = dq.pop() print(right_element) # 输出: c # 删除左侧第一个元素 left_element = dq.popleft() print(left_element) # 输出: a print(dq) # 输出: deque(['b']) ``` --- #### 扩展 `deque` 通过 `.extend()` 或 `.extendleft()` 将多个元素一次性加入 `deque`: ```python dq = deque(['a', 'b']) # 右侧扩展 dq.extend(['c', 'd']) print(dq) # 输出: deque(['a', 'b', 'c', 'd']) # 左侧扩展(注意顺序会反转) dq.extendleft(['e', 'f']) print(dq) # 输出: deque(['f', 'e', 'a', 'b', 'c', 'd']) ``` --- #### 遍历 `deque` 可以直接遍历 `deque` 容器内的所有元素: ```python dq = deque(['apple', 'banana', 'cherry']) for item in dq: print(item) # 输出: # apple # banana # cherry ``` --- #### 切片与旋转 虽然无法直接切片 `deque`,但可以用索引访问特定位置的元素。另外,`.rotate(n)` 方法允许将整个序列循环移动 n 步: ```python dq = deque([1, 2, 3, 4]) # 循环右移一步 dq.rotate(1) print(dq) # 输出: deque([4, 1, 2, 3]) # 循环左移两步 (负数表示左移) dq.rotate(-2) print(dq) # 输出: deque([2, 3, 4, 1]) ``` --- #### 实际应用场景 - **缓存实现**:利用 `maxlen` 参数构建有限容量的 FIFO 缓存。 - **并发编程**:作为线程安全的队列结构用于多线程环境下的数据交换。 - **滑动窗口算法**:处理涉及连续子数组的最大最小值计算等问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值