collections库(python)

一、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)])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值