Counter:计数器
# 用于计数,看作一个dict
a = ['apple', 'banana', 'apple', 'cat', 'cat', 'cat', 'dog']
b = Counter(a)
print(type(b))
print(b)
# 可以直接对列表统计每个元素出现的次数
结果
<class 'collections.Counter'>
Counter({'cat': 3, 'apple': 2, 'banana': 1, 'dog': 1})
a = Counter('Hello World')
b = Counter([1, 2, 3, 1, 2])
print(a)
print(b)
Counter({'l': 3, 'o': 2, 'H': 1, 'e': 1, ' ': 1, 'W': 1, 'r': 1, 'd': 1})
Counter({1: 2, 2: 2, 3: 1})
Counter的常用函数(方法)
most_common(k):筛选出现频率topk
elements():返回一个迭代器,每个元素重复对应次数
clear():清空
a = Counter('Hello World')
print(a)
print(a.most_common(2))
print(list(a.elements()))
print(a.keys())
print(a.values())
a.clear()
print(a)
# 利用赋值或字典初始化每个元素和出现次数
c = Counter(a=3, b=1)
d = Counter(a=2, b=2)
print(c+d)
print(c|d)
print(c&d)
结果:
Counter({'l': 3, 'o': 2, 'H': 1, 'e': 1, ' ': 1, 'W': 1, 'r': 1, 'd': 1})
[('l', 3), ('o', 2)]
['H', 'e', 'l', 'l', 'l', 'o', 'o', ' ', 'W', 'r', 'd']
dict_keys(['H', 'e', 'l', 'o', ' ', 'W', 'r', 'd'])
dict_values([1, 1, 3, 2, 1, 1, 1, 1])
Counter()
Counter({'a': 5, 'b': 3})
Counter({'a': 3, 'b': 2})
Counter({'a': 2, 'b': 1})
deque双端队列
双端队列大部分功能与list类似,但是插入和删除操作比list高效
from collections import deque
a = deque([1, 2, 3, 4])
a.append(5)
a.appendleft(0)
print(a)
a.popleft()
a.pop()
print(a)
a.extend([2,3,4])
print(a)
a.remove(2)
print(a)
# 结果
deque([0, 1, 2, 3, 4, 5])
deque([1, 2, 3, 4])
deque([1, 2, 3, 4, 2, 3, 4])
deque([1, 3, 4, 2, 3, 4])
????????
a = deque([1, 2, 3, 4, 1, 4, 2, 4])
a.reverse()
print(a)
print(a.count(4))
a.rotate(3)
print(a)
print('4所在的下标=', a.index(4))
# 结果
deque([4, 2, 4, 1, 4, 3, 2, 1])
3
deque([3, 2, 1, 4, 2, 4, 1, 4])
4所在的下标= 3
defaultdict:有默认值的字典
在字典中获取一个key有两种方法,第一种get ,第二种通过[ ]获取
使用dict时,如果引用的key不存在,就会抛出KeyError。
如果希望key不存在时,返回一个默认值,就可以用defaultdict。
from collections import defaultdict
d=defaultdict(int)
print(d['x'])
d=defaultdict(list)
print(d['x'])
d=defaultdict(set)
print(d['x'])
d=defaultdict(dict)
print(d['x'])
# 结果
0
[]
set()
{}
from collections import defaultdict
s = [(' yellow', 1), (' blue', 2), (' yellow ', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
d[k].append(v)
print(d)
defaultdict(<class 'list'>, {' yellow': [1], ' blue': [2], ' yellow ': [3], 'blue': [4], 'red': [1]})
OderedDict有序字典
与字典基本相同, key按照插入的顺序排序
popitem()函数:3.7以下版本的字典随机删除一个key-value对然后返回;3.7及以上版本删除最后一个元素返回
OrderedDict:可以指定参数last,last默认为True,删除最后一个;否则删除第一个
from collections import OrderedDict
data = [('a', 1), ('b', 2), ('c', 3)]
d = OrderedDict(data)
print(d)
while len(d) != 0:
print('删除的元素为:', d.popitem(False))
print(d)
#
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
删除的元素为: ('a', 1)
OrderedDict([('b', 2), ('c', 3)])
删除的元素为: ('b', 2)
OrderedDict([('c', 3)])
删除的元素为: ('c', 3)
OrderedDict()
move_to_end(key, last=True)函数:(特点)
OrderedDict将key移动到任一端。last=True表示右端,否则为左端。key不存在则报错。
????????
data = [('a', 1), ('b', 2), ('c', 3)]
d = OrderedDict(data)
print(d)
d.move_to_end('a')
print(d)
d.move_to_end('c', False)
print(d)
#
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
OrderedDict([('b', 2), ('c', 3), ('a', 1)])
OrderedDict([('c', 3), ('b', 2), ('a', 1)])