collections模块

在内置数据类型(dictlistsettuple)的基础上,collections模块还提供了几个额外的数据类型:CounterdequedefaultdictnamedtupleOrderedDict

官方文档:https://docs.python.org/zh-cn/3/library/collections.html

namedtuple(具名元组)

创建命名元组子类的工厂函数

语法

collections.namedtuple(typename, field_names, verbose=False, rename=False) 
  • typename:元组名称
  • field_names: 元组中元素的名称
  • rename: 如果元素名称中含有 python 的关键字,则必须设置为 rename=True
  • verbose: 默认就好

使用

from collections import namedtuple

point = namedtuple('坐标', ['x', 'y'])

p1 = point(11, 22)
p2 = point(33, 44)
print(p1, p2)
# 坐标(x=11, y=22) 坐标(x=33, y=44)
print(p1.x, p2.y)
# 11 44
person = namedtuple('人物', 'name age gender')
p1 = person('kevin', 22, 'male')
print(p1)
# 人物(name='kevin', age=22, gender='male')
print(p1.name)
# kevin

deque(双向队列)

类似列表list的容器,实现了在两端快速添加append和弹出pop

语法

class collections.deque([iterable[, maxlen]])
  • iterable:迭代对象
  • maxlen:可以增长到任意长度。否则,deque就限定到指定最大长度

双向队列deque对象支持以下方法

支持方法说明
appen(x)添加 x 到右端
appendleft(x)添加 x 到左端
clear()移除所有元素,使其长度为0
copy()创建一份浅拷贝
count(x)计算 deque 中元素等于 x 的个数
extend(iterable)扩展deque的右侧,通过添加iterable参数中的元素
extendleft(iterable)扩展deque的左侧,通过添加iterable参数中的元素
index(x)返回 x 在 deque 中的位置,如果未找到则报错
insert(i, x)在位置 i 插入 x
pop()移去并且返回一个元素,deque 最右侧的那一个,没有则报错
popleft()移去并且返回一个元素,deque 最左侧的那一个,没有则报错
remove(value)移除找到的第一个 value,没有则报错
reverse()deque逆序排列。返回 None
rotate(n=1)向右循环移动 n 步。 如果 n 是负数,就向左循环
maxlenDeque的最大尺寸,如果没有限定的话就是 None

使用

from collections import deque

d = deque([1, 2, 3])
print(d)
# deque([1, 2, 3])
d.append(4)  # 右边添加元素
print(d)
# deque([1, 2, 3, 4])
d.appendleft(5)
print(d)

d.pop()
print(d)
# deque([5, 1, 2, 3])
d.popleft()
print(d)
# deque([1, 2, 3])

OrderedDict(有序字典)

正常的字典内部是无序的(在py3.6 以后,字典默认为有序了)在对字典做迭代的时候,无法确定key的顺序,利用OrdereadDict可以保持字典的顺序

from collections import OrderedDict

my_dict = OrderedDict()

my_dict['name'] = 'kevin'
my_dict['age'] = 22
my_dict['gender'] = 'male'
my_dict['salary'] = 10000

for key, values in my_dict.items():
    print(key, values)
# name kevin
# age 22
# gender male
# salary 10000

注意

有序字典的作用只是记住元素插入顺序并按顺序输出。如果有序字典中的元素一开始就定义好了,后面没有插入元素这一动作,那么遍历有序字典,其输出结果仍然是无序的,因为缺少了有序插入这一条件,所以此时有序字典就失去了作用,所以有序字典一般用于动态添加并需要按添加顺序输出的时候

defaultdict (默认字典)

当字典里的key不存在但被查找时,会报错keyError,利用defaultdict可以返回的不是keyError而是一个默认值

语法

defaultdict( factory_function)
  • factory_function:可以是listsetstr等等

使用

from collections import defaultdict

my_dict1 = defaultdict(int)  
my_dict2 = defaultdict(str)  
my_dict3 = defaultdict(list)  
my_dict4 = defaultdict(set)
my_dict5 = defaultdict(tuple)
my_dict1[1] = 'one'

print(my_dict1[0])
# 0
print(my_dict2[0])
#
print(my_dict3[0])
# []
print(my_dict4[0])
# set ()
print(my_dict5[0])
# ()

Counter(计数工具)

用来计算出现的次数,并且是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)

语法

Counter(iterable)
  • iterable:迭代器对象

使用

from collections import Counter

s = 'aaaabbbbcdde'

print(Counter(s))
# Counter({'a': 4, 'b': 4, 'd': 2, 'c': 1, 'e': 1})
Last modification:March 29, 2022
如果觉得我的文章对你有用,请随意赞赏