collections 模块

xiaoxiao2025-08-30  12

collections是Python内建的一个集合模块,提供了许多有用的集合类

一个点的二维坐标就可以表示成 namedtuple 这个包可以来完成这个操作

from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(1, 2) print(p.x) # 1 print(p.y) # 2 Circle = namedtuple('circle', ["x", "y", "r"]) c = Circle(1, 2, 3) print(c) # circle(x=1, y=2, r=3) print(c.x) # 1

deque deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈

from collections import deque ls = [1, 2, 3] ls2 = deque(ls)`在这里插入代码片` ls2.append(10) ls2.appendleft(20) # 支持 appendleft() 高效的向头部添加 print(ls2) # deque([20, 1, 2, 3, 10]) print(list(ls2)) ls2.pop() ls2.popleft() # 支持 popleft() 高效的删除头部元素 print(ls2) # deque([1, 2, 3]) print(list(ls2))

defaultdict 当key不存在时,给字典定义一个默认值

使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict

from collections import defaultdict dd = defaultdict(lambda: ‘N/A’) dd[‘key1’] = ‘abc’ value = dd[‘key1’] # key1存在 print(value) # ‘abc’

value2 = dd[‘key2’] # key2不存在,返回默认值 print(value2) # ‘N/A’

OrderedDict 创建一个有序字典

使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序

from collections import OrderedDict dict1 = dict([('a', 1), ('b', 2), ('c', 3)]) print(dict1) # dict的Key是无序的 dict2 = OrderedDict([('a', 1), ('b', 2), ('c', 3)]) print(dict2) # OrderedDict([('a', 1), ('b', 2), ('c', 3)]) print(dict(dict2)) # {'a': 1, 'b': 2, 'c': 3} od = OrderedDict() od['z'] = 1 od['y'] = 2 od['x'] = 3 print(od) # 按照插入的Key的顺序返回

Counter是一个简单的计数器,例如,统计字符出现的个数

from collections import Counter c = Counter() for i in 'programming': c[i] = c[i]+1 print(c) # Counter({'r': 2, 'g': 2, 'm': 2, 'p': 1, 'o': 1, 'a': 1, 'i': 1, 'n': 1}) print(type(c)) # <class 'collections.Counter'> dict_c = dict(c) print(dict_c) # {'p': 1, 'r': 2, 'o': 1, 'g': 2, 'a': 1, 'm': 2, 'i': 1, 'n': 1}

参考链接地址: https://www.cnblogs.com/lwp-king666/p/8331508.html https://docs.python.org/2/library/collections.html#collections.Counter.most_common https://blog.csdn.net/qwe1257/article/details/83272340 这个玩意其实平时用的不多,就是作为一个了解,当你用到的时候可能就觉得有用了,这里面作为一个扩展,没啥难度,傻瓜式的记住就行了!

转载请注明原文地址: https://www.6miu.com/read-5035458.html

最新回复(0)