竞赛常用标准库:collections
一.Counter:计数器
1.用于计数,看作一个dict;可以直接对列表统计每个元素出现的次数。
from collections import Counter
a = ['apple','banana','apple','cat','cat','cat','dog']
b = Counter(a)
print('type(b) = ',type(b))
print('b = ',b)
普通方法如下
a = ['apple','banana','apple','cat','cat','cat','dog']
b = {}
for x in a:
b[x] = b.get(x,0) + 1
print(b)
2.定义方式
from collections import Counter
a = Counter() # 空Counter
print(a)
a = Counter('hello world') # 统计每个字符出现次数
print(a)
a = Counter([1,2,3,1,2,4]) # 统计每个元素出现的次数
print(a)
# 利用字典初始化每个元素(key)和出现的次数(value)
a = Counter(a = 1,b = 2,c = 3)
print(a)
a = Counter({'a':1,'b':2,'c':3})
print(a)
- most_common(k): 筛选出现频率topk
- elements(): 返回一个迭代器,每个元素重复对应次数
- clear(): 清空
- 大部分字典的功能均可以使用
- 数学运算
from collections import Counter
a = Counter('hello world')
print('a = ',a)
print('Top 2 :',a.most_common(2))
print('Top 1 :',a.most_common(1))
print('a.elements = ',a.elements())
print('all elements = ',list(a.elements()))
print(a.keys())
print(a.values())
a.clear()
print('a = ',a)
c = Counter(a = 3,b = 2)
d = Counter(a = 2,b = 1)
print('c + d = ',c + d)
print('c - d = ',c - d)
print('c & d = ',c & d)
print('c | d = ',c | d)
二.deque :双端队列
大多数功能同 list 相似,但是删除和插入操作比 list 更高效
append(x) : 添加x到右端
appendleft(x) : 添加x到左端
pop() : 移去并且返回一个元素,deque最右端的那个
popleft() : 移去并且返回一个元素,deque最左端的那个
insert(i,x) : 在位置 i 插入 x
extend(iterable) : 扩展deque的右侧,通过添加 iterable 参数中的元素
extend(iterable) : 扩展deque的左侧,通过添加 iterable 参数中的元素
注意,左添加时,在结果中 iterable 参数中的顺序将被反过来添加
remove(value) : 移除找到的第一个 value
from collections import deque
a = deque([1,2,3,4])
a.append(5)
a.appendleft(0)
print('a = ',a)
a.pop()
print('a = ',a)
a.popleft()
print('a = ',a)
a.extend([2,3,5])
print('a = ',a)
a.remove(2)
print('a = ',a)
一些方法
clear() : 清空
copy():拷贝
count(x):计算deque中x的个数
index(x,[,start[,stop]]): 返回x在deque中的位置(索引start之后,索引stop之前)
reverse():将deque逆序排列
rotate(n) :向右循环移动n步,若n为负数,则向左移动n步
maxlen: deque的最大尺寸,如果没有限制就是None
from collections import deque
a = deque([1,2,3,1,4,5,2,6,2,6])
print('a = ',a)
a.reverse()
print('a = ',a)
b = a.count(2)
print('2出现的次数是 :',b)
a.rotate(2)#右循环,为负数时左循环
print('a = ',a)
print('4的位置是:',a.index(4))
三.defaultdict :有默认值的字典
- 在字典中获取key有两种方法,一种是get,另一种是通过[]获取
- 使用dict时,如果key不存在,则会抛出KeyError
- 如果希望key不存在时,返回一个默认值,则使用defaultdict
from collections import defaultdict
d = defaultdict(int)#int() 返回 0)
print(d['x'])
d = defaultdict(list)#list() 返回 []
print(d['x'])
d = defaultdict(dict)#dict() 返回 {}
print(d['x'])
d = defaultdict(set) #set() 返回 set()
print(d['x'])
四. OrderDict :有序字典
- 与字典基本相同,key按照插入的顺序排序
- popitem 函数:删除最后一个元素返回
- OrderDict:可以指定参数last,last默认为True,删除最后一个,否则删除第一个
按顺序删
from collections import OrderedDict
a = [('a',1),('b',2),('c',3)]
d = OrderedDict(a)
print(d)
while len(d) != 0:
print('删除的元素为:',d.popitem(False))
print('d = ',d)
逆序删除
from collections import OrderedDict
a = [('a',1),('b',2),('c',3)]
d = OrderedDict(a)
print(d)
while len(d) != 0:
print('删除的元素为:',d.popitem(True))
print('d = ',d)
普通方法
from collections import OrderedDict
a = [('a',1),('b',2),('c',3)]
d = dict(a)
print(d)
while len(d) != 0:
print('删除的元素为:',d.popitem())
print('d = ',d)
- move_to_end(key,last = True) 函数
OrderDict将key移动到任一端,last = True表示右端,否则就是左端。key不存在则报错默认是True。
from collections import OrderedDict
a = [('a',1),('b',2),('c',3)]
d = OrderedDict(a)
print(d)
d.move_to_end('b')
print(d)
d.move_to_end('b',False)
print(d)