如何使用deque增删数据?

本文介绍了Python中deque双端队列和Counter计数器的使用方法。deque在列表两端的增删操作具有O(1)的时间复杂度,适合频繁操作的场景,而Counter作为统计元素频率的工具,基于dict实现,适用于元素计数需求。注意,deque牺牲了空间效率,而Counter要求元素可哈希。这两个数据结构在Python中提供了高效且便捷的解决方案。

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

如何使用deque增删数据?今天番茄加速就来讲一下。在这里插入图片描述

基本用法 deque 双端队列,基于list优化了列表两端的增删数据操作。基本用法:

from collections import deque

In [3]: d = deque([3,2,4,0])

In [4]: d.popleft() # 左侧移除元素,O(1)时间复杂度

Out[4]: 3

In [5]: d.appendleft(3) # 左侧添加元素,O(1)时间复杂度

In [6]: d

Out[6]: deque([3, 2, 4, 0])

使用场景

list左侧添加删除元素的时间复杂度都为O(n),所以在Python模拟队列时切忌使用list,相反使用deque双端队列非常适合频繁在列表两端操作的场景。但是,加强版的deque牺牲了空间复杂度,所以嵌套deque就要仔细trade-off:

In [9]: sys.getsizeof(deque())

Out[9]: 640

In [10]: sys.getsizeof(list())

Out[10]: 72

实现原理

cpython实现deque使用默认长度64的数组,每次从左侧移除1个元素,leftindex加1,如果超过64释放原来的内存块,再重新申请64长度的数组,并使用双端链表block管理内存块。

Counter

基本用法

Counter一种继承于dict用于统计元素个数的数据结构,也称为bag 或 multiset. 基本用法:

from collections import Counter

In [14]: c = Counter([1,3,2,3,4,2,2]) # 统计每个元素的出现次数

In [17]: c

Out[17]: Counter({1: 1, 3: 2, 2: 3, 4: 1})

# 除此之外,还可以统计最常见的项

# 如统计第1最常见的项,返回元素及其次数的元组

In [16]: c.most_common(1)

Out[16]: [(2, 3)]

使用场景

基本的dict能解决的问题就不要用Counter,但如遇到统计元素出现频次的场景,就不要自己去用dict实现了,果断选用Counter.

需要注意,Counter统计的元素要求可哈希(hashable),换句话说如果统计list的出现次数就不可行,不过list转化为tuple不就可哈希了吗.

实现原理 Counter实现基于dict,它将元素存储于keys上,出现次数为values.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值