python3:deque和list的区别

大家都知道list,很少有人用deque,更没有人去解释两个区别.
deque是Python中stack和queue的通用形式,也就是既能当做栈使用,又能当做双向队列,list是单向队列.

只要list里有的方法,deque 都可以用. 我列出如下 :

1 list.append(obj)
在列表末尾添加新的对象
2 list. count (obj)
统计某个元素在列表中出现的次数
3 list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4 list.index(obj)
从列表中找出某个值第一个匹配项的索引位置
5 list.insert(index, obj)
将对象插入列表
6 list.pop([index=-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7 list.remove(obj)
移除列表中某个值的第一个匹配项
8 list.reverse()
反向列表中元素
9 list.sort(cmp=None, key=None, reverse=False)
对原列表进行排序

但是deque 的方法list是不能用的例如:

appendleft(x) 头部添加元素
extendleft(iterable) 头部添加多个元素
popleft() 头部返回并删除
rotate(n=1) 旋转
maxlen 最大空间,如果是无边界的,返回None

deque 特殊方法介绍

通过上边的比较就可以证明deque是双向队列. 比如appendleft,extendleft,popleft 可以在头部进行增加和删除.,
这些方法比较简单,可以自己尝试下.
下边介绍特殊方法,
rotate(n=2) 意思是在序列的末尾两位移动到前面. 看下例子

from collections import deque

b=deque("ABCDEFG")
print(b)
b.rotate(2)
print(b)
b.rotate(3)
print(b)

打印结果如下:

deque(['A', 'B', 'C', 'D', 'E', 'F', 'G'])
deque(['F', 'G', 'A', 'B', 'C', 'D', 'E'])
deque(['C', 'D', 'E', 'F', 'G', 'A', 'B'])

maxlen 最大空间,如果是无边界的,返回None
这个可以指定 deque 的长度,通过下边的例子,体会下用处

from collections import deque

b=deque("ABCDEFG",8)
print(b)
b.extendleft("WERTY")
print(b)

打印结果:

deque(['A', 'B', 'C', 'D', 'E', 'F', 'G'], maxlen=8)
deque(['Y', 'T', 'R', 'E', 'W', 'A', 'B', 'C'], maxlen=8)

由于只能容纳8位, (D,E,F,G) 被删除掉.

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
IndexError: list index out of range是一个常见的错误,它通常在使用索引访问列表时出现。这个错误表示你试图访问一个不存在的索引位置,在列表中没有这个索引。 对于你的问题IndexError: deque index out of range,它的原因和解决方法与IndexError: list index out of range类似,只是数据结构不同而已。 dequePython中的一个双端队列(double-ended queue),它是一个可以从两端添加或删除元素的数据结构。当你使用索引访问deque时,如果索引超出了deque的范围,就会出现IndexError: deque index out of range错误。 要解决这个问题,你可以按照以下步骤进行操作: 1. 首先,检查你的索引是否超出了deque的长度范围。可以使用len()函数获取deque的长度,并确保索引在合法范围内。 2. 如果你确定索引是合法的,那么可能是你的deque在使用之前没有被正确初始化或者填充。确保你在使用deque之前正确地添加了元素。 3. 另外,你也可以使用try-except语句来捕获这个错误,以防止程序崩溃。在try代码块中访问索引,如果出现IndexError错误,可以在except代码块中处理或报告这个错误。 综上所述,当你遇到IndexError: deque index out of range错误时,你可以检查索引是否超出范围,确保deque已经正确初始化和填充,或者使用try-except语句来处理这个错误。希望这些方法对你有帮助!<span class="em">1</span> #### 引用[.reference_title] - *1* [**Python错误记录:IndexError: list index out of range**](https://blog.csdn.net/zhoubbt/article/details/53673637)[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_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值