python中collections模块介绍

1、collections介绍

这个模块实现了特定目标的容器,以提供Python标准内建容器 dict , list , set , 和 tuple 的替代选择。

namedtuple()创建命名元组子类的工厂函数
deque类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)
ChainMap类似字典(dict)的容器类,将多个映射集合到一个视图里面
Counter字典的子类,提供了可哈希对象的计数功能
OrderedDict字典的子类,保存了他们被添加的顺序
defaultdict字典的子类,提供了一个工厂函数,为字典查询提供一个默认值
UserDict封装了字典对象,简化了字典子类化
UserList封装了列表对象,简化了列表子类化
UserString封装了列表对象,简化了字符串子类化

2、对象介绍

(1)nametuple对象

 

(2)deque对象

   class collections.deque([ iterable [, maxlen ] ]):返回一个新的双向队列对象,从左到右初始化(用方法 append()) ,从 iterable (迭代对象) 数据创建。如果 iterable 没有指定,新队列为空。Deque队列是由栈或者queue队列生成的(发音是 “deck”,”double-ended queue”的简称)。Deque 支持线程安全,内存高效添加(append)和弹出(pop),从两端都可以,两个方向的大概开销都是 O(1) 复杂度。虽然 list 对象也支持类似操作,不过这里优化了定长操作和 pop(0) 和 insert(0, v) 的开销。它们引起 O(n) 内存移动的操作,改变底层数据表达的大小和位置。如果 maxlen 没有指定或者是 None ,deques 可以增长到任意长度。否则,deque就限定到指定最大长度。一旦限定长度的deque满了,当新项加入时,同样数量的项就从另一端弹出。限定长度deque提供类似Unix filter tail 的功能。它们同样可以用与追踪最近的交换和其他数据池活动。

    deque的方法介绍:

append(x)        # 添加 x 到右端。
appendleft(x)    # 添加 x 到左端。
clear()          # 移除所有元素,使其长度为0.
copy()           # 创建一份浅拷贝。

3.5 新版功能.
count(x)         # 计算deque中个数等于 x 的元素。

3.2 新版功能.
extend(iterable)           # 扩展deque的右侧,通过添加iterable参数中的元素。
extendleft(iterable)       # 扩展deque的左侧,通过添加iterable参数中的元素。注意,左添加时,在结果中iterable参数中的顺序将被反过来添加。
index(x[, start[, stop]])  # 返回第 x 个元素(从 start 开始计算,在 stop 之前)。返回第一个匹配,如果没找到的话,升起 ValueError 。

3.5 新版功能.
insert(i, x)     # 在位置 i 插入x,如果插入会导致一个限长deque超出长度 maxlen 的话,就升起一个 IndexError 。

3.5 新版功能.

pop()            # 移去并且返回一个元素,deque最右侧的那一个。如果没有元素的话,就升起 IndexError 索引错误。
popleft()        # 移去并且返回一个元素,deque最左侧的那一个。如果没有元素的话,就升起 IndexError 索引错误。
remove(value)    # 移去找到的第一个 value。 如果没有的话就升起 ValueError 。
reverse()        # 将deque逆序排列。返回 None 。

3.2 新版功能.
rotate(n=1)      # 向右循环移动 n 步。 如果 n 是负数,就向左循环。如果deque不是空的,向右循环移动一步就等价于 d.appendleft(d.pop()) , 
向左循环一步就等价于 d.append(d.popleft()) 。

Deque对象同样提供了一个只读属性:maxlen
Deque的最大尺寸,如果没有限定的话就是 None 。

3.1 新版功能.
除了以上,deque还支持迭代,清洗,len(d), reversed(d), copy.copy(d), copy.deepcopy(d), 成员测试 in 操作符,和下标引用 d[-1] 。
索引存取在两端的复杂度是 O(1), 在中间的复杂度比 O(n) 略低。要快速存取,使用list来替代。

(3)ChainMap对象

 

(4)Counter对象

   class collections.Counter([ iterable-or-mapping ]): 一个 Counter 是一个dict 的子类,用于计数可哈希对象。它是一个集合,元素像字典键(key)一样存储,它们的计数存储为值。计数可以是任何整数值,包括0和负数。Counter类有点像其他语言中的 bags或multisets。

1)Counter对象初始化

from collections import Counter

# 元素从一个 iterable 被计数或从其他的 mapping (or counter)初始化:
c = Counter()                           # a new, empty counter
c = Counter('gallahad')                 # a new counter from an iterable
c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
c = Counter(cats=4, dogs=8)             # a new counter from keyword args

# Counter对象有一个字典接口,如果引用的键没有任何记录,就返回一个0,而不是弹出一个 KeyError :
c = Counter(['eggs', 'ham'])
c['bacon']                              # count of a missing element is zero
0

# 设置一个计数为0不会从计数器中移去一个元素。使用 del 来删除它:
c['sausage'] = 0                        # counter entry with a zero count
del c['sausage']                        # del actually removes the entry

2)Counter的其它方法

   elements():返回一个迭代器,每个元素重复计数的个数。元素顺序是任意的。如果一个元素的计数小于1, elements() 就会忽略它。

c = Counter(a=4, b=2, c=0, d=-2)
sorted(c.elements())
['a', 'a', 'a', 'a', 'b', 'b']

    most_common([n]):返回一个列表,提供 n 个频率最高的元素和计数。 如果没提供 n ,或者是 None , most_common() 返回计数器中的 所有 元素。相等个数的元素顺序随机: 

Counter('abracadabra').most_common(3)  # doctest: +SKIP
[('a', 5), ('r', 2), ('b', 2)]

    subtract([iterable-or-mapping]):从迭代对象或映射对象减去元素。像 dict.update() 但是是减去,而不是替换。输入和输出都可以是0或者负数。

c = Counter(a=4, b=2, c=0, d=-2)
d = Counter(a=1, b=2, c=3, d=4)
c.subtract(d)
c
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})

(5)OrderDict对象

 

(6)defaultDict对象

 

(7)UserDict对象

 

(8)UserList对象

 

(9)UserString对象

 

 

 

本文参考:https://docs.python.org/zh-cn/3/library/collections.html

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值