python基础——collections模块常用函数

collections模块中常用的函数

参考容器数据类型——collections

Counter() 用于统计一个容器中各个元素的个数

Counter对象中常用的方法有:
most_common(n) 返回重复次数最多的n个值
a.update(b) 把b中的对象添加到a中
a.subtract(b) 从a中把b中的对象删除(删除完以后可以为负数)

import collections

a = collections.Counter("aabbddddsse")
print(a)
# 输出:Counter({'d': 4, 'a': 2, 'b': 2, 's': 2, 'e': 1})
for i in a:
	print(i, a[i], end=" -- ")
# 输出:a 2 -- b 2 -- d 4 -- s 2 -- e 1 -- 

print(a.most_common(2))
# 输出:[('d', 4), ('a', 2)]

b = collections.Counter([1,2,3,4,2,3,5])
print(b)
# 输出:Counter({2: 2, 3: 2, 1: 1, 4: 1, 5: 1})

c = collections.Counter("and")
a.update(c)
print(a)
# 输出:Counter({'d': 5, 'a': 3, 'b': 2, 's': 2, 'e': 1, 'n': 1})

a.subtract(c)
print(a)
# 输出:Counter({'d': 3, 'b': 2, 's': 2, 'a': 1, 'e': 1, 'n': -1})
deque对象

返回一个新的双向队列对象,在创建deque对象时,需要指定长度,如果没有指定,则视为无限长度;如果指定了长度,而增加的元素个数超过了队列的长度,则元素会从另外一端弹出

deque常用方法

a.append(x) 在队列右端添加元素
a.appendleft(x) 在队列左端添加元素
a.clear() 移出所有元素
a.copy() 浅拷贝
a.count(x) 计算a中有几个x
a.extend(it) 在a的右侧添加it中的元素
a.extendleft(it) 在a的左侧添加it中的元素
a.index(x) 返回第x个元素,没找到报错
a.insert(i,x) 在i的位置上插入x,如果x大于队列长度,报错
a.pop() 返回删除队列的最右侧的值
a.popleft() 返回删除队列的最左侧的值
a.remove(value) 删除指定的value值
a.reserve() 将队列元素反转

import collections

a = collections.deque(range(10))  # 没有指定长度
print(a)
# 输出:deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

b = collections.deque(range(10), 5)  # 前5个元素从另一端弹出
print(b)
# 输出:deque([5, 6, 7, 8, 9], maxlen=5)

c = collections.deque(range(10), 10)
print(c)  # 输出:deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
print(c.count(2))  # 1
c.append(10)
print(c)  # deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], maxlen=10)
c.appendleft(-1)
print(c)  # deque([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
print(c.copy())  # deque([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
defaultdict对象

返回一个类似字典的对象,它重载了一个方法并添加了一个可写的实例变量

import collections

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = collections.defaultdict(list)
for k,v in s:
	d[k].append(v)
print(d)
# 输出:defaultdict(<class 'list'>, {'yellow': [1, 3], 'blue': [2, 4], 'red': [1]})
namedtuple对象

命名元组工厂函数,命名元组赋予每个位置一个含义,提供可读性和自文档性。它们可以用于任何普通元组,并添加了通过名字获取值的能力,通过索引值也是可以的。

命名元组相当于每个元素都有一个具体的名字,更加形象直观的判断每一个元素的含义

import collections

Point = collections.namedtuple("Po",["x","y"])  # 创建命名元组
p = Point(x=1,y=2)  # 创建实例对象
print(p[0]+p[1])  # 通过索引取值
print(p.x+p.y)  # 通过名称取值
# 输出:3   3
OrderedDict对象

OrderedDict类似于正常的字典,他的插入的顺序是固定的,即使在迭代的时候也是按照插入的顺序进行迭代的

常用方法

pop(key) 删除具体的key
popitem() 删除最后一个键值对

d = {"a":1, "b":2,"c":3}
dd = collections.OrderedDict(d)
print(dd)
for i,j in dd.items():
    print(i,j)
# 输出:
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
a 1
b 2
c 3

d = {"a":1, "b":2,"c":3}
dd = collections.OrderedDict(d)
print(dd)
# dd.pop("a")  # 输出:OrderedDict([('b', 2), ('c', 3)])
dd.popitem()  # 输出:OrderedDict([('a', 1), ('b', 2)])
print(dd)
发布了36 篇原创文章 · 获赞 2 · 访问量 942

猜你喜欢

转载自blog.csdn.net/zzrs_xssh/article/details/103863332