Python丨常用内建模块 —— collections

collections(容器数据类型)


- 描述

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

namedtuple()创建命名元素子类的工厂函数
deque类似列表的容器,实现了在两端快速添加(append)和弹出(po)
ChainMap类似字典的容器类,将多个映射集合到一个视图里
Counter字典的子类,提供了可哈希对象的计数功能
OrderdDict字典的子类,保存了它们被添加的顺序
defaultdict字典的子类,提供了一个工厂函数,为字典查询提供一个默认值
- namedtuple()

语法

collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)

返回值:

返回一个新的元组子类,名为typename。这个新的子类用于创建类元组的对象,可以通过域名来获取属性值,同样也可以通过索引和迭代获取值。

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(11, y=22)

print(type(p))   # 返回一个新的元组子类,名为typename
# 输出结果:<class '__main__.Point'>

print(p[0] + p[1])   # 可以通过索引访问元组中的元素
# 输出结果:33

x, y = p   # 分开,类似于常规的元组
print(x, y)
# 输出结果:11 22

print(p.x + p.y)   # 通过名访问元素
# 输出结果:33

print(p)
# 输出结果:Point(x=11, y=22)
-deque

deque是为了高效实现插入和删除操作的双向列表,适用于队列和栈。list是线性存储,数据量大的时候,插入和删除效率很低。

deque对像支持的方法:

方法实现功能
append(x)添加x到右端
appendleft(x)添加x到左端
clear()移除所有元素,使其长度为0
copy创建一份浅拷贝
count(x)计算deque中个数等于x的元素
extent扩展deque的右侧,通过添加iterable参数中的元素
extendleft(iterable)扩展deque的左侧,通过添加iterable参数中的元素
index(x,[, start[, stop]])返回第x个元素(从start开始计算,在stop之前)。返回第一个匹配,如果没找到的化,raise ValueError
insert(i, x)在位置i插入x
pop()移去并且返回一个元素,deque最右侧的元素
popleft()移去并切返回一个元素,deque最左侧的元素
reverse()将deque逆序排列,返回None

例0

from collections import deque

d = deque('py')
for elem in d:
    print(elem.upper())

输出结果

P
Y

例1

from collections import deque

d = deque('py')

d.append('t')   # deque右侧添加一个元素
print(d)
# 输出结果:deque(['p', 'y', 't'])

d.appendleft('i')   # deque左侧添加一个元素
print(d)
# 输出结果:deque(['i', 'p', 'y', 't'])

d.popleft()   # 返回和一出最左侧元素
print(d)
# 输出结果:deque(['p', 'y', 't'])

print(list(d))   # 里列表形式展示出deque的内容
# 输出结果:['p', 'y', 't']

d.extend('hon')
print(d)
# 输出结果:deque(['p', 'y', 't', 'h', 'o', 'n'])
- defaultdict

语法

defaultdict([default_factory[,…]])

返回值

返回一个新的类似字典的对象。重载了一个方法并添加了一个可写的实例变量。其余的功能于dict类相同

使用list作为default_factory

from collections import defaultdict

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('red', 1)
d = defaultdict(list)

for k, v in s:
    d[k].append(v)

print(d.items())
# 输出结果:dict_items([('yellow', [1, 3]), ('blue', [2]), ('red', [1])])

使用int作为default_factory

from collections import defaultdict

s = 'mississippt'
d = defaultdict(int)

for k in s:
    d[k] += 1

print(list(d.items()))
# 输出结果:[('m', 1), ('i', 4), ('s', 4), ('p', 2)]

如果希望key不存在时,返回一个默认值

from collections import defaultdict

d = defaultdict(lambda: 'N/A')
d['key1'] = 'a'
print(d['key1'])
# 输出结果:a

print(d['key2'])
# 输出结果:N/A
- Counter

一个计数器工具,提供给快速和方便的计数

from collections import Counter

cnt = Counter()
for word in ['red', 'blue', 'red', 'green', 'red']:
    cnt[word] += 1

print(cnt)
# 输出结果:Counter({'red': 3, 'blue': 1, 'green': 1})

一个Counter是一个dict的子类,用于计数可哈希对象。它是一个集合,元素像字典键(key)一样储存,它们的计数存储位值(value)。

Counter的方法

elements()

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

from collections import Counter

c = Counter(a=4, b=2, c=0, d=-2)
print(list(c.elements()))
# 输出结果:['a', 'a', 'a', 'a', 'b', 'b']

most_common([n])

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

from collections import Counter

c = Counter('abcdaaabcd').most_common(3)
print(c)
# 输出结果:[('a', 4), ('b', 2), ('c', 2)]

d = Counter('abcdaaabcd').most_common()
print(d)
# 输出结果:[('a', 4), ('b', 2), ('c', 2), ('d', 2)]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值