Python中比list更加值得我们使用的一种数据结构,性能优化

说到容器类型,大家第一时间想到的多半是list,而list确实也能解决大部分的需要,但碰到列表内的数据量相当大的时候,性能问题就显得尤为重要;再或者列表被恶意注入一个无穷大的数据量时,就可能会暴露出安全问题来。较好的替代方法是:collections.deque。获得性能或安全的同时,牺牲的是数据大小。

deque队列两端取出或者删除时间复杂度都是O(1),而列表都是O(n),队列的性能比列表更好

简介

collections.deque对象(双端队列),支持从任意一端增加删除元素。deque是线程安全的,内存高效的队列,它被设计为从两端追加和弹出都非常快。

创建deque对象

deque() 用于创建一个deque对象

可选参数:

iterable 一个可迭代对象,如列表,元组

maxlen 最大长度,超出最大长度,会将之前的元素挤出去

示例:

from collections import deque

dq = deque([1,2,3,4]],maxlen=10)

deque对象的方法

dq.append(x)在右端添加x

>>>dq.append(5)

>>>print(dq)

deque([1, 2, 3,4,5])

dq.appendleft(x)在左端添加x

>>>dq.appendleft(0)

>>>print(dq)

deque([0,1,2,3,4,5])

dq.pop()在右端弹出元素,若队列无元素,会报错

>>>dq.pop()5

dq.popleft()在左端弹出元素,若队列无元素,会报错

>>>dq.popleft(0)

dq.extend(iterable)和列表的extend类似,在右侧扩展队列,参数是一个可迭代对象

>>>dq.extend([5,6,7,8])

dq.extendleft(iterable)同理

>>>dq.extendleft([5,6,7,8])

dq.remove(value)移除第一个找到的value,若未找到,会导致IndexError

dq.remove(3)

dq.clear()清空队列

dq.clear()

rotate(n)如果n>0,所有元素向右移动n个,否则向左

dq.rotate(5)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180721A1NLEH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券