Python进阶——Collections模块

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/duaduo/article/details/83719876

首先导入这个模块:

import collections

1.计数器

Couter 是collections 模块提供的计数器

c=Counter()                      #空的计数器
c=Counter('gallahad')            # 从一个可迭代的对象构造
c=Counter({'red':4,'blue':2})    # 从一个集合映射中构造
c=Counter(cats=4,dogs=8)         # 使用键值队参数

例子1:统计下面一段文本中各个单词出现的次数:

# 去掉字符串中的标点
from string import  punctuation
sentence = "One,two,three,one,two,tree!!!!"
for word in sentence:
    if word in punctuation:
        sentence=sentence.replace(word," ")

print(sentence)
print(punctuation)。 

输出为:
One two three one two tree    
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
word_list=sentence.lower().split()     # 将sentence 中的字母都转为小写字母,并用空格分开
t = collections.Counter(word_list) # 利用word_list 序列生成一个计数器
print(t['one'])    # 计算键值的个数 对不存在的键输出为 0

1.计数器可以看作特殊的字典,支持字典的大部分操作,向字典中添加键

t['somethings']=100 # 插入新的计数结果
t['somethings']=-2 #可以将键的计数结果设为负数
t['somethings']='test' # 可以将键的值设为非数字

print(t)
输出为:
Counter({'three': 1, 'tree': 1, 'two': 2, 'one': 2, 'somethings': 'test'})

2.删除键为somtthings的键


del t['somethings']   #
print(t)
输出为:
Counter({'two': 2, 'one': 2, 'three': 1, 'tree': 1})

3.查询前n 个常见的元素,该方法返回的结果按照

print(t.most_common(2))

4.方法elements()返回一个按照元素计数次数返回元素的迭代器,该方法忽略所有计数小于1的元素:

c=collections.Counter(a=4,b=2,c=0,d=-2)
t1=list(c.elements())
print(t1)
输出结果:
['b', 'b', 'a', 'a', 'a', 'a']

计数器支持的符号运算:
c+d:对应的元素计数相加
c-d:对应的元素的计数相减
c|d:对应的元素的计数取并:即最大值
c&d:对应的元素的计数取交:即最小值
注意,这些运算返回的结果会将非正次数的元素去掉

对于计数对象c , 常用的操作有:

print(sum(c.values()))       #输出总数
print(c.most_common()[:-n-1:-1])# 输出次数最少的n个元素
c+=collections.Counter()    # 去除非正次书的元素
print(c.clear())	#重置计数器
list(c)	# 得到无宠物元素的列表

2.双端队列
deque 是 collections 模块提供的双端队列
双端队列支持将元素从队尾插入的操作

dp=deque()
for i in range(10):
  dp.appendleft(i)		#	 可以从队头出入双端队列
print(dp)
输出为:
deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
虽然列表也有同样的方式,但会比这个慢得多

对应弹出元素的方法为 .pop() 和 .popleft()

3.有序字典
OrderedDict 是collections 模块提供的有序字典,有序字典是指按键值书序排列的字典,我们构建内容相同的普通字典和有序字典。

items=[('A',1),('B',2),('C',3)]
regular_dict=dict(items)
ordered_dict=collections.OrderedDict(items)

for k,v in regular_dict.items():
    print(k,v)
输出结果:
A 1
C 3
B 2
for k,v in ordered_dict.items():
    print(k,v)
 输出结果:
 A 1
B 2
C 3

 

4.带默认值的字典
defaultdict 是collections 模块提供的带默认值的子代呢,对于普通字典,索引不存在的键会抛出一场,带默认值的字典可以在定义时设定一个默认值,当索引不存在的键时候,带默认值的字典会将键的值更新为默认值。

# 默认值为空的列表
dd=collections.defaultdict(list)
dd['foo']

输出结果为:[]

# 默认值为0和0.0
dd=collections.defaultdict(int)
print(dd['foo'])

输出值为:0
dd=collections.defaultdict(float)
print(dd['foo'])

输出值为:0.0

# 还可用Lambda 表达式来构造自定义的函数
dd=collections.defaultdict(lambda :2)
print(dd['foo'])

输出为:2

猜你喜欢

转载自blog.csdn.net/duaduo/article/details/83719876