前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >标准库 collections 中 4 个常用的数据结构

标准库 collections 中 4 个常用的数据结构

作者头像
somenzz
发布2021-10-20 14:45:33
2470
发布2021-10-20 14:45:33
举报
文章被收录于专栏:Python七号Python七号

collections 库是标准库的一部分,里面有很多数据结构,在列表、字典、元组的基础上做了很多修改和提升。

今天就来说说最有用的几个。

1、deque

它实现了两端都可以操作的队列,相当于双端队列,与可以指定最多存储多少个元素,与 Python 的基本数据类型列表很相似。

from collections import deque
a = deque(maxlen=3)

上述代码定义了大小为 3 的双端队列,当你插入第 4 个元素时,队列的第一个元素会被删除。

a = deque(maxlen=3)
a.append(1) # a = [1]
a.append(2) # a = [1, 2]
a.append(3) # a = [1, 2, 3] FULL
a.append(4) # a = [2,3,4]

因为这是一个双端队列,你可以在队列的首位插入元素,也可以在首尾删除元素,它们的时间复杂度都是 O(1):

  • append(x) 在队列尾部插入 x
  • appendleft(x) 在队列头部插入 x
  • pop() 在队列尾部删除一个元素,并返回
  • popleft() 在队列头部删除一个元素,并返回
a = deque(maxlen = 10)
a.append(1) # a = [1]
a.append(2) # a = [1, 2] 在队列尾部插入 2
a.appendleft(3)# a = [3, 1, 2] 在队列头部插入 3
x = a.pop() # a = [3, 1], x = 2 删除队列尾部元素 2
y = a.popleft() # a = [1], y = 3 删除队列头部元素 3

2、namedtuple

这个库提供了命名的元组,可以通过指定的名称来访问,例如:

from collections import namedtuple
Point = namedtuple("Point", ['x','y','z'])
p = Point(3,4,5)
print(p.x, p.y, p.z) #Output: 3, 4, 5

namedtuple 函数把第一个参数作为新元组的名称,第二个参数就是元组内元素的名称映射,可以是一个字符串列表,也可以是空格或逗号分割的字符串。

Point = namedtuple("Point", "x y z")
Point = namedtuple("Point", "x,y,z")

也可以这样初始化,非常灵活:

p1 = Point(3,4,5)
p2 = Point(x=3, y=4, z=5)
p3 = Point._make([3,4,5])

还可以使用 namedtuple 来设置默认值:

PointDef = namedtuple("PointDef", "x, y, z", defaults = [0,0,0])
p = PointDef(x=1) # p is (1,0,0)

如果你定义了三个名称,却提供了两个默认值,那么只有最后两个会被赋予默认值:

Point = namedtuple("Point", "x y z",defaults ="[0, 0])
print(Point._field_defaults)
# output: {“y”: 0, “z”: 0}

3、Counter

计数器 Counter 非常有用,尤其当你需要统计列表或可迭代对象中元素的数量时:

from collections import Counter
c = Counter(“aaabbccdaaa”)
print(c)
#Output: Counter({'a': 6, 'b': 2, 'c': 2, 'd': 1})

还可以方便的统计频率前几大,比如统计出现频率最高的两个元素:

print(c.most_common(2))
#output: [('a', 6), ('b', 2)]

还可以动态增删字符串,然后统计:

c = Counter("abbc") # {"a":1, "b":2, "c":1}
c.update("bccd") # {"a":1, "b":3, "c":3, "d":1}
c.subtract("bbc") # {"a":1, "b":1, "c":2, "d":1}

4、defaultdict

defaultdict 和 dict 差不多,但是可以提供 dict 的 values 的默认数据类型,比如:

from collections import defaultdict
toAdd =[("key1", 3), ("key2", 5), ("key3", 6), ("key2", 7)]
d = defaultdict(list)
for key, val in toAdd:
  d[key].append(val)
print(d) # {"key1":[3], "key2":[5, 7], "key3":[6]}

如果你用 dict,可能要这样写:

d = dict()
for key, val in toAdd:
  if key in d:
    d[key].append(val)
  else:
    d[key] = [val]

或者是这样的:

d = dict()
for key, val in toAdd:
  d.setdefault(key, []).append(val)

总之,defaultdict 是简单和快捷的。

最后

本文分享了 4 个 collections 库中常用的几个数据结果,如果对你有所帮助,还请点赞关注支持:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、deque
  • 2、namedtuple
  • 3、Counter
  • 4、defaultdict
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档