蓝桥杯(Python_B组)自我学习5

竞赛常用标准库: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)

  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值