一、Counter——计数器(和字典类似)
1.传入可迭代对象
from collections import Counter
#可以传入可迭代对象
a=Counter()
b=Counter("Hello World")
c=Counter([1,2,3,4])
print(a)
print(b)
print(c)
#结果:
# Counter()
# Counter({'l': 3, 'o': 2, 'H': 1, 'e': 1, ' ': 1, 'W': 1, 'r': 1, 'd': 1})
# Counter({1: 1, 2: 1, 3: 1, 4: 1})
#可以传入字典
e=Counter({"a":1,"b":2})
f=Counter(a=1,b=2)
print(e)
print(f)
#结果:
# Counter({'b': 2, 'a': 1})
# Counter({'b': 2, 'a': 1})
2.计算出现次数:变量=Counter(可迭代对象)
from collections import Counter
#统计可迭代对象的元素出现次数
a="wwjijuhfrrrrrt"
#方法一:利用字典的功能
dict1={}
for i in a:
dict1[i]=dict1.get(i,0)+1
print(dict1)
#结果
#{'w': 2, 'j': 2, 'i': 1, 'u': 1, 'h': 1, 'f': 1, 'r': 5, 't': 1}
#方法二:Counter
p=Counter(a)
print(p)
#结果
#Counter({'r': 5, 'w': 2, 'j': 2, 'i': 1, 'u': 1, 'h': 1, 'f': 1, 't': 1})
#可用遍历字典的方法来遍历collections.Counter类型
for x,y in p.items():
print(x,y)
3.常用函数
①筛选前K个次数最高的元素:Counter类型数据.most_common(k)
②返回一个迭代器,将每个元素重复对应次数:Counter类型数据.elements()
(注意:直接打印不出来,需要换成可打印的列表等类型才能打印)
③清空:Counter类型数据.clear()
from collections import Counter
a="llfhhufydbskiaasjduhuuuuub"
p=Counter(a)
#筛选出前2个最高频率的元素
print(p.most_common(2))
#将元素重复对应次数,并放入一个迭代器
print(list(p.elements()))
#清空
p.clear()
print(p)
#结果
[('u', 7), ('h', 3)]
['l', 'l', 'f', 'f', 'h', 'h', 'h', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'y', 'd', 'd', 'b', 'b', 's', 's', 'k', 'i', 'a', 'a', 'j']
Counter()
4.数学运算
from collections import Counter
#collections.Counter类型可以进行数学计算
a=Counter(x=3,y=2)
b=Counter(x=1,y=9)
#相同元素的次数相加
print(a+b)
#相同元素的次数相减(减到负数则为为0,不打印该元素)
print(a-b)
#取交集
print(a&b)
#取并集
print(a|b)
#结果:
# Counter({'y': 11, 'x': 4})
# Counter({'x': 2})
# Counter({'y': 2, 'x': 1})
# Counter({'y': 9, 'x': 3})
二、deque库(与list类型相似,但是比list类型运行快)
1.将可迭代类型转换成deque类型
from collections import deque
#将可迭代数据改为deque类型
a="123"
b=deque(a)
print(b)
print(type(b))
#结果:
#deque(['1', '2', '3'])
#<class 'collections.deque'>
2. 增
①在最右边添加一个元素:deque类型.append(元素)
②在最左边添加一个元素:deque类型.appendleft(元素)
③在最右边添加一串可迭代对象:deque类型.extend(可迭代对象)
④在最左边添加一串可迭代对象:deque类型.extendleft(可迭代对象)
!!!注意,元素的顺序将反过来添加
⑤在i的位置插入一个元素:deque类型.insert(i,元素)
from collections import deque
a="123"
b=deque(a)
#增
b.append(a)
print(b)
b.appendleft(a)
print(b)
b.extend(a)
print(b)
b.extendleft(a)
print(b)
b.insert(1,"555")
print(b)
#结果:deque(['1', '2', '3', '123'])
# deque(['123', '1', '2', '3', '123'])
# deque(['123', '1', '2', '3', '123', '1', '2', '3'])
# deque(['3', '2', '1', '123', '1', '2', '3', '123', '1', '2', '3'])
#deque(['3', '555', '2', '1', '123', '1', '2', '3', '123', '1', '2', '3'])
3.删
①删除最右边的元素:deque类型.pop()
②删除最左边的元素:deque类型.popleft()
③删除指定的一个value:deque类型.remove(value)
from collections import deque
a="123"
b=deque(a)
#删
b.pop()#括号内不放元素
print(b)
b.popleft()#括号内不放元素
print(b)
b.remove("2")
print(b)
#结果:
#deque(['1', '2'])
#deque(['2'])
#deque([])
4.改
①拷贝:deque类型.copy()
②将deque类型逆序排列:deque类型.reverse()
③向右边循环移动n步:deque类型.rotate(n)
向左边循环移动n步:deque类型.rotate(-n)
④清空:deque类型.clear()
from collections import deque
a="123"
b=deque(a)
#改
c=b.copy()
print(c)
b.reverse()
print(b)
b.rotate(1)
print(b)
b.rotate(-1)
print(b)
b.clear()
print(b)
#结果:
# deque(['1', '2', '3'])
# deque(['3', '2', '1'])
# deque(['1', '3', '2'])
# deque(['3', '2', '1'])
#deque([])
5.查
①查x出现次数:deque类型.count(x)
②在[start,stopx)区间内查第一次出现x的下标:deque类型.index(x,start,stop)
③控制deque类型的长度x:变量=deque(maxlen(x))
!!!当长度超过x时,自动删去最早插入的元素,使长度控制在x
from collections import deque
a="123"
b=deque(a)
#查
c=b.count("1")
print(c)
d=b.index("1",0,2)
print(d)
f=deque([1,2,3],maxlen=2)
print(f)
#结果:
# 1
# 0
# deque([2, 3], maxlen=2)
三、defaultdict——有默认值的字典(与字典类型相似)
!!!与字典的区别
1.查找字典中不存在的的值时,会报错。
dict1={}
print(dict1["x"])#查找字典中键为"x"的值
#结果
KeyError: 'x'
2.而利用defaultdict创建的字典在查找不存在的值时不会报错,并且返回一个默认值。
from collections import defaultdict
dict1=defaultdict(dict)
print (dict1["x"])#查找的dict1中键为"x"的值
#结果
{}
3.defaultdict( )的默认值
①int:0
②set:set()
③dict:{}
④list:[]
from collections import defaultdict
d=defaultdict(int)
print(d["x"])
#结果 0
d=defaultdict(list)
print(d["x"])
#结果 []
d=defaultdict(set)
print(d["x"])
#结果 set()
d=defaultdict(dict)
print(d["x"])
#结果 {}
4.使用案例
from collections import defaultdict
s=[("yellow",1),("blue",2),("yellow",3),("blue",4),("red",1)]
d=defaultdict(list)#d为空列表
for k,v in s:
d[k].append(v)#如果字典中k不存在,则将v增添到空列表;如果存在,则将v增添到k所对应的列表。
print(d)
#结果
defaultdict(<class 'list'>, {'yellow': [1, 3], 'blue': [2, 4], 'red': [1]})
四、OrderedDict——有序字典(与字典类似)
1.可以选择删除字典第一个键值对(last=False)或删除最后一个键值对(last=True)的函数:OrderedDict类型.popitem(last=True/False)
from collections import OrderedDict
a=[("a",1),("b",2),("c",3)]
d=OrderedDict(a)
while len(d)!=0:
print("删除的元素为:",d.popitem(last=False))
print(d)
#结果
删除的元素为: ('a', 1)
删除的元素为: ('b', 2)
删除的元素为: ('c', 3)
OrderedDict()
2.与字典的区别:dict类型.popitem()——随机删除一对键值对
3.能够移动键值对(last=True为移到最右,last=False为移到最左端)(key必须为OderedDict类型):move_to_end(key,last)
from collections import OrderedDict
a=[("a",1),("b",2),("c",3)]
d=OrderedDict(a)
d.move_to_end("a",last=True)
print(d)
#结果
OrderedDict([('b', 2), ('c', 3), ('a', 1)])