Python中的collections类的使用(1)
1.Counter的使用
Counter是一个dict子类,主要是用来对需要访问的对象的频率进行计数。在collections类中用的也是比较多的一种操作方式。
- 计数(Counter函数可以用来统计列表、字符、字符串等的元素个数)
from collections import Counter
colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
c = Counter(colors)
print (dict(c))
---------
# 输出结果
>>{'red': 2, 'blue': 3, 'green': 1}
---------
c1=Counter("hello world")
print("c1:")
print(dict(c1))
c2=Counter("How are you thank you".split())
print("c2:")
print(dict(c2))
list(c2.elements())#获取元素
#输出
>>c1:
>>{'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
>>c2:
>>{'How': 1, 'are': 1, 'you': 2, 'thank': 1}
>>['How', 'are', 'you', 'you', 'thank']
- 创建
cnt = Counter() # 传进空值
c = Counter('gallahad') # 传进字符串
c = Counter({'red': 4, 'blue': 2}) # 传进字典
c = Counter(cats=4, dogs=8) # 传进元组
- 其他操作
c = Counter(a=3, b=1)
d = Counter(a=1, b=2)
c['a'] #获取元素值
#3
c + d # 相加
#Counter({'a': 4, 'b': 3})
c - d # 相减,如果小于等于0,删去
#Counter({'a': 2})
c & d # 求最小
#Counter({'a': 1, 'b': 1})
c | d # 求最大
#Counter({'a': 3, 'b': 2})
sc=Counter('abracadabra').most_common(3) #求元素值最多的前几位
#[('a', 5), ('b', 2), ('r', 2)]
2.deque的使用
deque是双边队列,可以从左右两边加载删除元素,结合了栈和队列的特点,可以在python中直接调用,在一些算法问题上有很好的应用。
- append(x):添加x到右端
- appendleft(x):添加x到左端
- clear():清楚所有元素,长度变为0
- copy():创建一份浅拷贝
- count(x):计算队列中个数等于x的元素
- extend(iterable):在队列右侧添加iterable中的元素
- extendleft(iterable):在队列左侧添加iterable中的元素,注:在左侧添加时,iterable参数的顺序将会反过来添加
- index(x[,start[,stop]]):返回第 x 个元素(从 start 开始计算,在 stop 之前)。返回第一个匹配,如果没找到的话,升起 ValueError 。
- insert(i,x):在位置 i 插入 x 。注:如果插入会导致一个限长deque超出长度 maxlen 的话,就升起一个 IndexError 。
- pop():移除最右侧的元素
- popleft():移除最左侧的元素
- remove(value):移去找到的第一个 value。没有抛出ValueError
- reverse():将deque逆序排列。返回 None 。
- maxlen:队列的最大长度,没有限定则为None。
import collections
d = collections.deque([])
d.append('a') # 在最右边添加一个元素,此时 d=deque('a')
d.appendleft('b') # 在最左边添加一个元素,此时 d=deque(['b', 'a'])
d.extend(['c','d']) # 在最右边添加所有元素,此时 d=deque(['b', 'a', 'c', 'd'])
d.extendleft(['e','f']) # 在最左边添加所有元素,此时 d=deque(['f', 'e', 'b', 'a', 'c', 'd'])
d.pop() # 将最右边的元素取出,返回 'd',此时 d=deque(['f', 'e', 'b', 'a', 'c'])
d.popleft() # 将最左边的元素取出,返回 'f',此时 d=deque(['e', 'b', 'a', 'c'])
d.rotate(-2) # 向左旋转两个位置(正数则向右旋转),此时 d=deque(['a', 'c', 'e', 'b'])
d.count('a') # 队列中'a'的个数,返回 1
d.remove('c') # 从队列中将'c'删除,此时 d=deque(['a', 'e', 'b'])
d.reverse() # 将队列倒序,此时 d=deque(['b', 'e', 'a'])