Collections中的双向队列-deque

双端队列,可以快速的从另外一侧追加和推出对象,deque是一个双向链表,针对list连续的数据结构插入和删除进行优化。它提供了两端都可以操作的序列,这表示在序列的前后你都可以执行添加或删除操作。双向队列(deque)对象支持以下方法:

1、append()

添加 x 到右端。

d = deque('ghi')  
d.append('j') 
d

2、appendleft()

添加 x 到左端。

d.appendleft('f')
d

3、clear()

移除所有元素,使其长度为0.

d = deque('ghi')
d.clear()
d

4、copy()

创建一份浅拷贝。

d = deque('xiaoweuge')
y = d.copy()
print(y)

5、count()

计算 deque 中元素等于 x 的个数。

d = deque('xiaoweuge-shuai')
d.count('a')

6、extend()

扩展deque的右侧,通过添加iterable参数中的元素。

a = deque('abc')
b = deque('cd')
a.extend(b)
a
#与append 的区别
a = deque('abc')
b = deque('cd')
a.append(b)
deque(['a', 'b', 'c', deque(['c', 'd'])])

7、extendleft()

扩展deque的左侧,通过添加iterable参数中的元素。注意,左添加时,在结果中iterable参数中的顺序将被反过来添加。

a = deque('abc')
b = deque('cd')
a.extendleft(b)
a

8、index()

返回 x 在 deque 中的位置(在索引 start 之后,索引 stop 之前)。 返回第一个匹配项,如果未找到则引发 ValueError。

d = deque('xiaoweuge')
d.index('w')

9、insert()

在位置 i 插入 x 。

如果插入会导致一个限长 deque 超出长度 maxlen 的话,就引发一个 IndexError。

a = deque('abc')
a.insert(1,'X')

10、pop()

移去并且返回一个元素,deque 最右侧的那一个。 如果没有元素的话,就引发一个 IndexError。

d.pop()

11、popleft()

移去并且返回一个元素,deque 最左侧的那一个。 如果没有元素的话,就引发 IndexError。

d.popleft()

12、remove(value)

移除找到的第一个 value。 如果没有的话就引发 ValueError。

a = deque('abca')
a.remove('a')
a

13、reverse()

将deque逆序排列。返回 None 。

#逆序排列
d = deque('ghi') # 创建一个deque
list(reversed(d))
deque(reversed(d))

14、rotate(n=1)

向右循环移动 n 步。 如果 n 是负数,就向左循环。

如果deque不是空的,向右循环移动一步就等价于 d.appendleft(d.pop()) , 向左循环一步就等价于 d.append(d.popleft()) 。

 向右边挤一挤
d = deque('ghijkl')
d.rotate(1)                      
d


# 向左边挤一挤
d.rotate(-1)                     
d


#看一个更明显的
x = deque('12345')
x

x.rotate()
x


d = deque(['12','av','cd'])
d.rotate(1)

15、maxlen

Deque的最大尺寸,如果没有限定的话就是 None 。

from collections import deque
d=deque(maxlen=10)
for i in range(20):
   d.append(i)
d  

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

Deque从版本3.5开始支持 __add__(), __mul__(), 和 __imul__() 。

from collections import deque
d = deque('ghi')                 # 创建一个deque

for elem in d:
    print(elem.upper())

#从右边添加一个元素
d.append('j')
d   
#deque(['g', 'h', 'i', 'j'])

#从左边添加一个元素
d.appendleft('f')
d 
#deque(['f', 'g', 'h', 'i', 'j'])


#右边删除
d.pop()                          
#'j'
#左边边删除
d.popleft()
#'f'
#看看还剩下啥
list(d)                          # 
#['g', 'h', 'i']
#成员检测
'h' in d                         
#True
#添加多个元素
d.extend('jkl')              
d
#deque(['g', 'h', 'i', 'j', 'k', 'l'])


d.clear()                        # empty the deque
d.pop()                          # cannot pop from an empty deque
#Traceback (most recent call last):
#    File "<pyshell#6>", line 1, in -toplevel-
#        d.pop()
#IndexError: pop from an empty deque


d.extendleft('abc')              # extendleft() reverses the input order
d
#deque(['c', 'b', 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sonhhxg_柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值