import collections
# https://www.cnblogs.com/lwp-king666/p/8331508.html
import time
print(time.ctime())
print('hello Jupyter!')
Sat May 8 09:17:53 2021
hello Jupyter!
# 一、Counter统计元素的个数,并以字典形式返回{元素:元素个数}
str1="aaabbcccdff"
c1 = collections.Counter(str1)
print("c1",c1)
# 1. most_common:将元素出现的次数按照从高到低进行排序,并返回前N个元素,
# 若多个元素统计数相同,按照字母顺序排列,N若未指定,则返回所有元素
c2 = c1.most_common(3)
print("c2",c2)
c1 Counter({'a': 3, 'c': 3, 'b': 2, 'f': 2, 'd': 1})
c2 [('a', 3), ('c', 3), ('b', 2)]
# 2.elements:返回一个迭代器,元素被重复多少次,在迭代器中就包含多少个此元素,
# 所有元素按字母序排列,个数<1的不罗列
c2 = collections.Counter(a=2,b=1,c=3,d=1)
c3 = list(c2.elements())
print(c3)
['a', 'a', 'b', 'c', 'c', 'c', 'd']
# 3. update:增加元素的重复次数,update本身是没有返回值,只能赋值给其他变量
c1.update("a")
print(c1)
Counter({'a': 7, 'c': 3, 'b': 2, 'f': 2, 'd': 1})
# 4.subtract:减少元素重复次数,跟update相反
c1.subtract("a")
print(c1)
Counter({'a': 5, 'c': 3, 'b': 2, 'f': 2, 'd': 1})
# 二、orderedDict有序字典,继承了dict的所有功能,dict是无序的,
# orderedDict刚好对dict作了补充,记录了键值对插入的顺序,是有序字典
dic = collections.OrderedDict({"name":"tom","age":18,"sex":"man"})
print(dic)
OrderedDict([('name', 'tom'), ('age', 18), ('sex', 'man')])
# 1.清空字典
dic.clear()
print(dic)
OrderedDict()
# 2. popitem:有序删除,类似于栈,按照后进先出的顺序依次删除,last是bool值,默认True
# dic.popitem(last=False)
dic.popitem(last=True)
print(dic)
OrderedDict([('name', 'tom'), ('age', 18)])
# 3.pop:删除指定键值对
dic.pop(key="name")
print(dic)
OrderedDict([('age', 18), ('sex', 'man')])
# 4. move_to_end:将指定键值对移到最后位置,可以用last指定前后
dic.move_to_end(key="sex",last=True)
print(dic)
OrderedDict([('name', 'tom'), ('age', 18), ('sex', 'man')])
# 5. setdefault:设置默认值,默认为None,也可指定值
dic.setdefault("score",80)
print(dic)
OrderedDict([('name', 'tom'), ('age', 18), ('sex', 'man'), ('score', 80)])
# 6. update:更新字典,有则更新,无则添加
dic.update({"score":90})
print(dic)
OrderedDict([('name', 'tom'), ('age', 18), ('sex', 'man'), ('score', 90)])
# 三、默认字典(defaultdict):设置values默认类型,如list、tuple
dic1=collections.defaultdict(list)
dic1["course"].append("En")
dic1["course"].append("Cn")
print(dic1)
defaultdict(<class 'list'>, {'course': ['En', 'Cn']})
# 四、可命名元组(namedtuple): 可通过名称访问元组中的元素,提高代码可读性
TupleName=collections.namedtuple('TupleName',['a','b','c']) #通过namedtuple自定义一个TupleName类
obj=TupleName(11,22,33) # 通过类创建对象obj
print(obj.a) # 通过名称访问元组中的元素
print(obj.b)
print(obj.a * obj.c)# 通过名称访问元组中的元素并进行计算
11
22
363
# 五、双向队列(deque):类似于list,允许两端操作元素,
deq=collections.deque('abcd')
print(deq)
deque(['a', 'b', 'c', 'd'])
# 1. append:从队列右侧添加元素
deq.append(11)
print(deq)
deque(['a', 'b', 'c', 'd', 11])
# 2.appendleft:从队列左侧添加元素
deq.appendleft(12)
# 3.clear:清空队列
deq.clear()
# 4. count:统计队列中元素个数
num = deq.count('a')
print(num)
1
# 5.extend:从队列右侧扩展
deq.extend([22,33])
print(deq)
deque([12, 'a', 'b', 'c', 'd', 11, 22, 33])
# 6.extendleft:从队列左侧扩展
deq.extendleft({'k1':'v1','k2':'v2'}) # 扩展类型为dict,取keys
print(deq)
deque(['k2', 'k1', 12, 'a', 'b', 'c', 'd', 11, 22, 33])
# 7.index:取元素索引位置
deq.index("k1")
1
# 8.insert:在队列任意位置插入值
deq.insert(1,11)
print(deq)
deque(['k2', 11, 'k1', 12, 'a', 'b', 'c', 'd', 11, 22, 33])
# 9. pop:从队列右侧移除值
deq.pop()
# 10.popleft:从队列左侧移除值
deq.popleft()
# 11. remove:移除指定值
deq.remove('k2')
# 12.reverse:将队列中的元素反转
deq.reverse()
print(deq)
deque([33, 22, 11, 'd', 'c', 'b', 'a', 12, 'k1', 11, 'k2'])
# 13. rotate:移动队列中的元素,若n<0,则将队列最左侧的元素依次移动至最右侧,反之,n>0,将队列最右侧元素移动至最左侧
deq.rotate(-2)
print(deq)
deque([11, 'd', 'c', 'b', 'a', 12, 'k1', 11, 'k2', 33, 22])
collections详细介绍附参数说明及输出结果
最新推荐文章于 2023-11-17 18:42:02 发布