python collections 模块 常用集合
1.nametulpe
# tuple 可以表示不变集合 列如坐标 point = (1,1)
# 缺点是 只可以通过下标方式访问 #namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了# tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。 # 这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备
# tuple的不变性,又可以根据属性来引用,使用十分方便。
from collections import namedtuple point = namedtuple("point", ['x', 'y'])
p = point(1, 2) print(p.x)
print(isinstance(p, Point)) # Ture
print(isinstance(p, tuple)) # Ture
print(p.y)
# Point对象是tuple的一种子类 #类似的,如果要用坐标和半径表示一个圆
# namedtuple('名称', [属性list]):
Circle = namedtuple('Circle', ['x', 'y', 'r'])
2.deque
#双向队列
#定义长度,可用于历史记录的查询
# deque除了实现list的append()和pop()外,还支持appendleft()和
# popleft(),这样就可以非常高效地往头部添加或删除元素 from collections import deque q = deque([7,8,9],maxlen=10)
q.append(1)
print(q) # 详情参照: https://www.cnblogs.com/mangmangbiluo/articles/9805939.html
3.defaultdict
# 使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict
from collections import defaultdict
dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
dd['key1'] # key1存在 返回'abc'
dd['key2'] # key2不存在,返回默认值 'N/A'
# 注意默认值是调用函数返回的,而函数在创建defaultdict
对象时传入。
# 除了在Key不存在时返回默认值,defaultdict
的其他行为跟dict
是完全一样的。
4. OrderedDict
使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。 如果要保持Key的顺序,可以用OrderedDict from collections import OrderedDict
d = dict([('a', 1), ('b', 2), ('c', 3)])
print( d) # dict的Key是无序的 {'a': 1, 'c': 3, 'b': 2}
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od) # OrderedDict的Key是有序的 rderedDict([('a', 1), ('b', 2), ('c', 3)]) 注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:
>>> od = OrderedDict()
>>> od['z'] = 1
>>> od['y'] = 2
>>> od['x'] = 3
>>> od.keys() # 按照插入的Key的顺序返回
['z', 'y', 'x']
OrderedDict可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key:
from collections import OrderedDict class LastUpdatedOrderedDict(OrderedDict): def __init__(self, capacity):
super(LastUpdatedOrderedDict, self).__init__()
self._capacity = capacity def __setitem__(self, key, value):
containsKey = 1 if key in self else 0
if len(self) - containsKey >= self._capacity:
last = self.popitem(last=False)
print ('remove:', last)
if containsKey:
del self[key]
print 'set:', (key, value)
else:
print ('add:', (key, value))
OrderedDict.__setitem__(self, key, value)
5.Counter
# Counter
是一个简单的计数器,例如,统计字符出现的个数 词频统计器
>>> from collections import Counter
>>> c = Counter()
>>> for ch in 'programming':
... c[ch] = c[ch] + 1
...
>>> c
Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})
#Counter实际上也是dict的一个子类,上面的结果可以看出,字符'g'、'm'、'r'各出现了两次,其他字符各出现了一次。
参照:https://www.liaoxuefeng.com/wiki/897692888725344/973805065315456
python collections 模块 常用集合的更多相关文章
- (转)python collections模块详解
python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...
- Python collections模块总结
Python collections模块总结 除了我们使用的那些基础的数据结构,还有包括其它的一些模块提供的数据结构,有时甚至比基础的数据结构还要好用. collections ChainMap 这是 ...
- Python collections 模块用法举例
Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想给大家 介绍的 collections 就是一个非常好的例子. 1.collections模块基本介绍 我们都知道 ...
- python collections模块
collections模块基本介绍 collections在通用的容器dict,list,set和tuple之上提供了几个可选的数据类型 namedtuple() factory function f ...
- Python OS模块常用功能 中文图文详解
一.Python OS模块介绍 OS模块简单的来说它是一个Python的系统编程的操作模块,可以处理文件和目录这些我们日常手动需要做的操作. 可以查看OS模块的帮助文档: >>> i ...
- Python——collections模块、time模块、random模块、os模块、sys模块
1. collections模块 (1)namedtuple # (1)点的坐标 from collections import namedtuple Point = namedtuple('poin ...
- Python——collections模块
collections模块 collections模块在内置数据类型(dict.list.set.tuple)的基础上,还提供了几个额外的数据类型:ChainMap.Counter.deque.def ...
- python collections模块详解
参考老顽童博客,他写的很详细,例子也很容易操作和理解. 1.模块简介 collections包含了一些特殊的容器,针对Python内置的容器,例如list.dict.set和tuple,提供了另一种选 ...
- Python - typing 模块 —— 常用类型提示
前言 typing 是在 python 3.5 才有的模块 前置学习 Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html 常用类型提示 ...
随机推荐
- Qt读写文件
1.头文件 #include<QFile> #include<QFileDialog> #include<QDataStream> 2.写代码前工作 在ui界面拖入 ...
- D. Domino for Young
基本思想是利用涂色的方法,用黑白两种颜色把方格全部涂色,相邻方格不同色. 方法1:基于二分图匹配的思想 一开始也想过二分图匹配,但数据量太大,就放弃了这种想法.其实根据增广路的定义.如果白色的方格的数 ...
- 关于iScroll在安卓移动端/chrome模拟移动端上下滑动卡顿问题处理!!!!真实可靠!!!已解决!!!
滑动卡顿效果 安卓手机打开微信浏览网页,Chrome模拟手机浏览网页,都出现的问题滑动卡顿! 修改代码点: 1. <style type="text/css"> ...
- HTML连载65-过渡模块的基本使用
一.过渡模块的基本使用 1.*:hover;这个伪类选择器除了可以用在a标签上,还可以用在其他任何标签上. 2.过渡三要素: (1)必须要有属性发生变化:(2)必须告诉系统哪个属性需要执行过渡效果:( ...
- linux系统如何进行录屏
linux系统如何录屏安装SimpleScreenRecorder 按Ctrl+ALt+T打开终端 添加源: sudo add-apt-repository ppa:maarten-baert/sim ...
- 关于f(x)
有时 z = x + y 有时 0 = x + y 有时单独用f(x) 有时 z = f(x) 很容易分不清. 从集合角度,将f(x)看成映射 即从A集合到B集合的对应关系 这样f(x)可以单独使用, ...
- JAVA是否最适合企业应用开发?
· JAVA是否最适合企业应用开发? 当我刚入行做程序员的时候,那是在01-02年,铺天盖地的都是java,j2ee,公司也使用java作为开发语言,我也就随大流加入javaer阵营. 从那时起,各种 ...
- 16G内存,将内存占用,降到了 40% 以下,之前是 90%+
自定义组件:
- [转]三分钟学会.NET Core Jwt 策略授权认证
[转]三分钟学会.NET Core Jwt 策略授权认证 一.前言# 大家好我又回来了,前几天讲过一个关于Jwt的身份验证最简单的案例,但是功能还是不够强大,不适用于真正的项目,是的,在真正面对复杂而 ...
- jQuery---第一部分复习
jquery: 简单.粗暴 jq和js的关系 js是什么? js是一门编程语言 jq仅仅是基于js的一个库,jq可理解为就是开发js的一个工具. 概念 1. 为什么 ...