Python高级数据类型模块collections
collections模块提供更加高级的容器数据类型,替代Python的内置dict
,list
, set
,和tuple
Counter对象
提供计数器,支持方便和快速的计数。返回的是一个以元素为键,出现次数为值的字典
cnt = Counter() #创建一个Counter对象
lst =['red', 'blue', 'red', 'green', 'blue', 'blue']
for word in lst:
cnt[word] += 1
print cnt # 输出:Counter({'blue': 3, 'red': 2, 'green': 1})
c1 = Counter('gallahad') #输出:Counter({'a': 3, 'l': 2, 'h': 1, 'g': 1, 'd': 1})
c2 = Counter({'red': 4, 'blue': 2}) #输出:Counter({'red': 4, 'blue': 2})
c3 = Counter(cats=4, dogs=8) #输出:Counter({'dogs': 8, 'cats': 4})
c4 = Counter(['eggs', 'ham']) #输出:Counter({'eggs': 1, 'ham': 1})
使用:Counter对象除了支持用于字典的所有方法(fromkeys和update除外)之外,还支持以下的三种方法
elements()
返回一个迭代器,重复每个重复次数的元素,计数小于1的被忽略。
c = Counter(a=, b=, c=, d=-)
i = c.elements() #返回一个迭代器
list(i) #输出:['a', 'a', 'a', 'a', 'b', 'b']
most_common([n])
返回n个最常见元素及其计数的列表,从最常见到最少排序。
c = Counter('abracadabra')
c.most_common(3) #输出:[('a', 5), ('r', 2), ('b', 2)]
subtract([可迭代或映射])
从迭代或从另一个映射(或计数器)中减去元素。输入和输出都可以为零或负数
c = Counter(a=, b=, c=, d=-)
d = Counter(a=, b=, c=, d=)
c.subtract(d)
print c 输出:Counter({'a': , 'b': , 'c': -, 'd': -})
Counter常见用法
c = Counter(a=4, b=2, c=0, d=-2)
sum(c.values()) # 计算value值的和,输出:4
c.clear() # 清除所有键值,c的值为Counter()
list(c) # 返回键的列表,输出:['a', 'b', 'c', 'd']
set(c) # 返回键的集合, 输出:set(['a', 'b', 'c', 'd'])
dict(c) # 返回键值对的字典,输出:{'a': 4, 'b': 2, 'c': 0, 'd': -2}
c.items() # 返回键值对的元组的列表,输出:[('a', 4), ('c', 0), ('b', 2), ('d', -2)]
Counter(dict([('a',2),('b',3),('c',4)])) # 返回Counter对象,输出:Counter({'c': 4, 'b': 3, 'a': 2}
c.most_common()[:-n-:-] # 列表切片
+c #移除值为0和负数的键值对(2.7版本没有该功能)
c = Counter(a=, b=)
d = Counter(a=, b=)
c + d #输出:Counter({'a': , 'b': })
c - d #输出:Counter({'a': })
c & d #相当于min(c[x], d[x]),输出:Counter({'a': , 'b': })
c | d #相当于max(c[x], d[x]),输出:Counter({'a': , 'b': })
deque对象
双向队列。
支持以下方法:
append(x) #将x添加到队列的右侧。 appendleft(x) #将x添加到队列的左侧。 clear() #删除所有元素。 copy() #队列的浅复制。版本3.5中的新功能。 count(x) #计算队列中元素等于x的数量。版本3.2中的新功能。 extend(iterable) #将iterable可迭代对象追加到队列的右侧。 extendleft(iterable) #将iterable对象插入到队列的左侧。注意,迭代对象的元素会反转顺序。 index(x, start, stop) #返回队列中第一个x的位置(在start和stop之间)。未找到则引发ValueError。版本3.5中的新功能。 insert(i,x) #将x插入到队列的下标为i的位置。如果插入会导致有界双端超过maxlen,则会引发IndexError。版本3.5中的新功能。 pop() #从队列的右侧移除并返回一个元素。如果没有元素,则引发一个IndexError。 popleft() #从队列的左侧移除并返回一个元素。如果没有元素,则引发一个IndexError。 remove(value) 删除第一次出现的value。如果没有找到,则引发一个ValueError。 reverse() #反转队列。版本3.2中的新功能。 rotate(n = 1) #向右旋转队列n步。如果n为负数,则向左旋转。当双端队列不为空时,向右d.appendleft(d.pop())旋转一步相当于,向左旋转一步相当于d.append(d.popleft())。
创建一个双向队列
d = deque('ghi') # 返回一个双向队列对象:deque(['g', 'h', 'i'])
defaultdict对象
类字典对象。具有标准dict的操作(还有__missing__和default_factory方法)。
用法:
d = defaultdict(attr) #返回一个新的类字典对象,第一个参数attr提供default_factory的属性值,默认为None
#用list作为default_factory的属性,类似于dict.setdedault,将一系列键值对分组到列表字典中
s = [('yellow', ), ('blue', ), ('yellow', ), ('blue', ), ('red', )]
d = defaultdict(list) # 创建一个list属性的defaultdict对象
for k, v in s:
d[k].append(v)
# d的输出为:defaultdict(<type 'list'>, {'blue': [2, 4], 'red': [1], 'yellow': [1, 3]})
sorted(d.items()) #输出:[('blue', [, ]), ('red', []), ('yellow', [, ])] #使用dict.setdefault方法实现:
d = {}
for k, v in s:
d.setdefault(k, []).append(v) sorted(d.items()) #输出:[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
#用int作为default_factory的属性,对单个元素计数
s = 'mississippi'
d = defaultdict(int) #创建一个int属性的defaultdict对象
for k in s:
d[k] += 1
# d的输出为:defaultdict(<type 'int'>, {'i': 4, 'p': 2, 's': 4, 'm': 1})
sorted(d.items()) #输出:[('i', 4), ('m', 1), ('p', 2), ('s', 4)]
#用set作为default_factory的属性,构建集合字典
s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
d = defaultdict(set)
for k, v in s:
d[k].add(v)
# d的输出为:defaultdict(<type 'set'>, {'blue': set([2, 4]), 'red': set([1, 3])})
sorted(d.items()) #输出:[('blue', {2, 4}), ('red', {1, 3})]
namedtuple对象
可以命名的元组。
Point = namedtuple('Point', ['x', 'y']) #创建一个命名元组
p = Point(11, y=22) #赋值给元组,输出:Point(x=11, y=22)
p[0] + p[1] #元组元素相加,输出:33
x, y = p #将元素赋值给x, y,
x, y #输出:(11, 22), 单个x或y输出为:11或22p.x + p.y #元组元素相加,输出:33
除了继承元组的方法外,还支持以下三个方法和两个属性:
_make():把序列变成命名元组对象
t = [11, 22]
Point._make(t) #输出:Point(x=11, y=22)
_asdict():返回一个新的OrderedDict
映射键值对
p = Point(x=11, y=22)
p._asdict() #输出:OrderedDict([('x', 11), ('y', 22)])
_replace(**kwargs):替换命名元组指定键的值
p = Point(x=11, y=22)
p._replace(x=33) #输出:Point(x=33, y=22)
_fields:返回命名元组的键
p = Point(x=11, y=22)
p._fields #输出:('x', 'y') Color = namedtuple('Color', 'red green blue')
Pixel = namedtuple('Pixel', Point._fields + Color._fields)
Pixel(11, 22, 128, 255, 0) #输出:Pixel(x=11, y=22, red=128, green=255, blue=0)
_fields_defaults:将字段名称映射到默认值,返回一个字典
Account = namedtuple('Account', ['type', 'balance'], defaults=[0])
Account._fields_defaults
{'balance': 0}
Account('premium') #输出:Account(type='premium', balance=0)
OrderedDict对象
有序字典。按键的插入顺序排序
d = OrderedDict.fromkeys('abcde') #创建一个有序字典对象,输出:OrderedDict([('a', None), ('b', None), ('c', None), ('d', None), ('e', None)])
除了具有字典dict的方法之外,还有以下两种方法:
popitem(last=True):删除并返回键值对。如果last为true,则删除并返回右端的键值对,如果为false,则删除并返回左端的键值对。
d: OrderedDict([('a', None), ('b', None), ('c', None), ('d', None), ('e', None)])
d.popitem(last=True) #返回('e', None)
d: OrderedDict([('a', None), ('b', None), ('c', None), ('d', None)])
d.popitem(last=False) #返回('a', None)
d: OrderedDict([('b', None), ('c', None), ('d', None)])
move_to_end(key, last=true):将key键移动到有序字典的前端或后端。如果last是true(默认),则移动到右端,last为false,移动到左端
d.move_to_end('b')
s = ''.join(d.keys()) #输出:'acdeb'
d.move_to_end('b', last=False)
w = ''.join(d.keys()) #输出:'bacde'
UserDict对象
UserList对象
UserString对象
Python高级数据类型模块collections的更多相关文章
- Python内建模块--collections
python内建模块--collections collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不变集合,例如,一个点 ...
- Python之常用模块--collections模块
认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...
- 25、typing导入Python的数据类型模块、collections集合模块
一.typing模块 1.typing模块的作用 类型检查,防止运行时出现参数和返回值类型不符合. 作为开发文档附加说明,方便使用者调用时传入和返回参数类型. 该模块加入后并不会影响程序的运行,不会报 ...
- Python高级数据类型
除了python中默认提供的几种基本数据类型 collections模块还提供了几种特别好用的类型! 1.Conters //计数器 2.Orderdict // 有序字典 3.defalutdict ...
- python 常用的模块(collections)转
collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: >>> ...
- python内建模块——collections模块
在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict.namedtuple和Ord ...
- python 必学模块collections
包含的主要功能如下 查看collections 的源码我们可以看到其为我们封装了以下的数据结果供我们调用 __all__ = ['deque', 'defaultdict', 'namedtuple' ...
- python内建模块Collections
# -*- coding:utf-8 -*- # OrderedDict可以实现一个FIFO(先进先出)的dict, # 当容量超出限制时,先删除最早添加的Key: from collections ...
- Python高级数据结构-Collections模块
在Python数据类型方法精心整理,不必死记硬背,看看源码一切都有了之中,认识了python基本的数据类型和数据结构,现在认识一个高级的:Collections 这个模块对上面的数据结构做了封装,增加 ...
随机推荐
- 南京Uber优步司机奖励政策(7.20~7.26)
人民优步奖励前提 *必须满足当周平均评分4.5星及以上,且当周接单率70%及以上,满足以上所有前提即可获得当周奖励 *刷单和红线行为立即封号并取消当周全部奖励及车费! 滴滴快车单单2.5倍,注册地 ...
- 阅读笔记《JavaScript语言精粹》
阅读笔记<JavaScript语言精粹> 对象 1.检索属性 使用[]和. 2.引用传递 JavaScript的简单数据类型包括数字.字符串.布尔值.null值和undefined值.其它 ...
- ping telnet 指令
Ping 一 作用 ping能够辨别网络功能的某些状态,这些状态是日常网络故障诊断的基础.Ping能够识别连接的二进制状态(看是否连通).Ping命令通过过向计算机发送ICMP回应报文并监听回应报文的 ...
- LOB类型的学习、总结
LOB相关的概念 LOB类型: 将信息文件(十进制.二进制).图像甚至音频信息采用数据库作为保存载体时,就需要使用lob类型数据. 有两种Lob,Internal Lob和External Lob.I ...
- HTTP与IIS知识点
HTTP TCP/IP 使用的网络是在TCP/IP协议族的基础上运作的.HTTP属于它内部的一个子集. 协议:计算机与设备要互相通信,双方就必须基于相同的方法.这种规则称为协议(protocol) 分 ...
- 「日常训练」Watering Flowers(Codeforces Round #340 Div.2 C)
题意与分析 (CodeForces 617C) 题意是这样的:一个花圃中有若干花和两个喷泉,你可以调节水的压力使得两个喷泉各自分别以\(r_1\)和\(r_2\)为最远距离向外喷水.你需要调整\(r_ ...
- Linux命令大全(非常全,史上最全)
最近学习Linux,最大的体验就是它的很多东西都需要由命令来进行控制,下面是我总结的一些命令,供大家参考: 系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 una ...
- 只写Python一遍代码,就可以同时生成安卓及IOS的APP,真优秀
前言: 用Python写安卓APP肯定不是最好的选择,但是肯定是一个很偷懒的选择 我们使用kivy开发安卓APP,Kivy是一套专门用于跨平台快速应用开发的开源框架,使用Python和Cython编写 ...
- 1. 两数之和【Leetcode中国,by java】
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...
- VBS简明教程
VBS简明教程 一.输出 VBS的输出使用函数Msgbox调用对话框进行输出. Msgbox(message) Message为要输出的信息 二.输入 VBS的输入,调用函数Inputbox()进 ...