Python第十一章-常用的核心模块01-collections模块
python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用.
本章主要介绍 python 的一些内置常用核心模块
Python 常用的核心模块
一、collections模块
这是个有用的容器模块, 提供了许多有用的集合, 来弥补通用的内置容器:list, dict, tuple, set

1.1 namedtuple()
namedtuple()是一个工厂函数, 用来创建一个tuple的子类型namedtuple.
我们以前的tuple只能通过下标去访问, namedtuple访问元素的时候可以使用类似属性的东西去访问.
基本使用
from collections import namedtuple
# 参数1: 要创建的 tuple 的类型的名字 参数2:新类型拥有的属性列表
# 返回的是个类, 这个类的类名就是 Point(参数1确定的) , 拥有两个属性 x, y
# 变量 Point 只是表示我们又重新定义了变量指向了返回的那个类而已
Point = namedtuple("Point", ["x", "y"])
print(Point)
print(issubclass(Point, tuple)) # 确实是 tuple 的子类
# 使用返回的类型创建一个对象, 这个对象就表示一个平面中的点
p1 = Point(x=10, y=20)
print(p1.x)
print(p1.y)

说明:
- 从上面可以很容易的看出来, 使用
namedtuple可以很容易定义出一种数据类型 - 他具备
tuple的不可变性, 又能根据属性来引用, 一个字:用起来就是爽 - 定义一个表示平面的圆:
Circle = namedtuple('Circle', ['x', 'y', 'r'])
继承自tuple
由于namedtuple返回的类继承自tuple, 所以tuple的属性和方法在这里都可以使用.
比如用下标去访问, 用for去迭代等等.
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
p1 = Point(x=10, y=20)
print(p1[0])
print(p1[1])
for i in p1:
print(i)

3 个新增方法和 2 个新增属性
类方法:_make(序列或迭代器)
从已知的序列或迭代器中创建一个实例
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
nums = [20, 100]
p1 = Point._make(nums)
print(p1)
p2 = Point._make(range(10, 12))
print(p2)

实例方法:_asdict()
返回一个列表(从3.1f开始是一个OrderedDict)
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
p1 = Point(10, 20)
d = p1._asdict()
print(d)

实例方法:_replace(关键字参数)
更改某个属性的值, 由于namedtuple是不可变的, 所以返回的是一个新的namedtuple实例对象
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
p1 = Point(10, 20)
p2 = p1._replace(y=100)
print(p2)

类属性:_source
返回创建的类的源码
类属性: _fields
返回创建类的所有属性
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
print(Point._fields)

1.2 类:deque
deque是一个双向队列.
发音: deck 是 "double-ended queue" 的简写
deque线程安全, 内存高效, 支持在两端添加和删除元素.
相对list主要体现在添加和删除效率比较高.
创建deque对象
deque([iterable[, maxlen]])
两个参数都是可选
参数1: 可迭代对象, 会把里面的数据初始近双端队列中
参数2: 双端队列允许的最大长度. 如果元素个数超出了这个只, 则只保留后面添加的.
from collections import deque
d = deque(range(10))
print(d)

方法和属性
append(x)
队列的右边添加元素.
注意:对队列来说, 左边指队首, 右边指队尾
appendleft(x)
在队列的左边添加元素
clear()
情况队列中的所有元素, 然后长度成为 0
copy()
浅复制队列中的元素 (3.5新增)
count(x)
统计指定的元素 x 在队里中出现的次数
extend(iterable)
向右扩展队列
extendleft(iterable)
向左扩展队列
index(x)
查找x在队里中第一次出现的下标. 如果没有找到, 则抛出异常
insert(i, x)
把x插入到下标为i的位置
pop()
删除并返回最右边的元素
popleft
删除并返回最左边的元素
remove(x)
删除队列中第一个x
reverse()
翻转队列中的元素
只读属性:maxlen
创建队列的时候设定的允许的元素的最大个数
1.3 类:Counter
Counter用来统计集合中元素出现的次数.
Counter是dict的子类, 每个键值对都表示元素和元素出现的次数.
创建Counter对象
Counter([iterable-or-mapping])
参数:需要统计的迭代类型或mapping 类型
from collections import Counter
# 通过可迭代类型创建一个 Counter
c1 = Counter("abcabc3344efg")
print(c1)
# 通过 dict 创建一个 Counter
c2 = Counter({"a": 3, "b": 4}) # 表示 a 出现了3次
print(c2)
# 通过关键字创建一个 Counter
c3 = Counter(cats=4, dogs=8) # 表示 cats 出现了4次
print(c3)

有用的几个方法
elements()
根据统计结果, 返回一个包含所有元素的可迭代类型的对象
most_common(n)
返回出现次数最多的前n个元素
from collections import Counter
c1 = Counter("abcabc3344efg")
print(sorted(c1.elements())) # 所有的元素
print(c1.most_common(2))
c2 = Counter({"a": 3, "b": 4})
print(sorted(c2.elements()))
print(c2.most_common(2))
c3 = Counter(cats=4, dogs=8)
print(sorted(c3.elements()))
print(c3.most_common(1))
1.4 类:defaultdict
在以前我们使用dict的时候, 如果访问不存在的key时会抛出异常. 使用defaultdict则可以避免这个问题.
defaultdict(函数)
说明:
- 如果访问的
key不存在, 则会调用传递的函数, 把函数作为value - 其余的使用和
dict一样
from collections import defaultdict
d = defaultdict(lambda: "默认值")
d["b"] = "bbb"
# key 不存在, 则调用函数, 把函数返回值作为值. 并把键值对存入到 defaultdict中
print(d["a"])
print(d["b"])
print(d)

from collections import defaultdict
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
d[k].append(v)
print(sorted(d.items()))

from collections import defaultdict
# 统计每个字符出现的次数
s = "abcdabAbc"
d = defaultdict(int)
for k in s:
d[k] += 1
print(sorted(d.items()))

1.5 类:OrderedDict
dict的键值对是无序的.
ordereddict是可以记录键值对的插入顺序的dict.
from collections import OrderedDict
od = OrderedDict()
od["a"] = 10
od["c"] = 20
od["b"] = 40
for k, v in od.items():
print(k + " : " + str(v))

Python第十一章-常用的核心模块01-collections模块的更多相关文章
- Python第十一章-常用的核心模块03-json模块
python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...
- Python第十一章-常用的核心模块04-datetime模块
python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...
- python的常用模块之collections模块
python的常用模块之collections模块 python全栈开发,模块,collections 认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文 ...
- Python 常用模块(1) -- collections模块,time模块,random模块,os模块,sys模块
主要内容: 一. 模块的简单认识 二. collections模块 三. time时间模块 四. random模块 五. os模块 六. sys模块 一. 模块的简单认识 模块: 模块就是把装有特定功 ...
- Python模块01/自定义模块/time模块/datetime模块/random模块
Python模块01/自定义模块/time模块/datetime模块/random模块 内容大纲 1.自定义模块 2.time模块 3.datetime模块 4.random模块 1.自定义模块 1. ...
- 模块二之序列化模块以及collections模块
模块二之序列化模块以及collections模块 一.序列化模块 json模块 ''' 序列化:将python或其他语言的数据类型转换成字符串类型 json模块: 是一个序列化模块. json: 是一 ...
- 《Python》常用模块之collections模块
内置的数据类型: int float complex str list tuple dict set 基础数据类型: int float complex str list tuple ...
- python常见模块之collections模块
一.模块简介 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict.namedtu ...
- 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)
认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...
随机推荐
- 放弃了程序员互联网高薪,跑去事业单位做IT的尴尬
“你是程序员对吧?”“是啊,怎么了?”“那你帮我修一下电脑吧.”我原来也是一个重点大学毕业,基本上事业里面搞IT就干这些事情,要是以前,我肯定会想,我是程序员和修电脑有啥关系. 但是自从进了事业单位, ...
- 绕过Referer和Host检查
1.我们在尝试抓取其他网站的数据接口时,某些接口需要经过请求头中的Host和Referer的检查,不是指定的host或referer将不予返回数据,且前端无法绕过这种检查 此时通过后端代理解决 在vu ...
- 内网渗透之跨边界传输 - 反弹shell
大年初一,当然是更一篇重磅文章啦 反弹shell /bin目录下带sh的都是shell nc 1.正向连接,目标机监听自身端口,攻击机主动建立连接 目标机:nc -lvvp 端口 -e /bin/ba ...
- Druid 0.17 入门(3)—— 数据接入指南
在快速开始中,我们演示了接入本地示例数据方式,但Druid其实支持非常丰富的数据接入方式.比如批处理数据的接入和实时流数据的接入.本文我们将介绍这几种数据接入方式. 文件数据接入:从文件中加载批处理数 ...
- 《自拍教程46》Python_adb自动拍照100张
Android手机测试, 涉及照相机(Camera)应用程序的稳定性测试的用例, 需要涉及100张照片的拍照自动化测试. 准备阶段 先清理老照片,照片一般存放在/scard/DCIM目录下 adb s ...
- 【Weiss】【第03章】队列例程
前几个例程还是相当简单的,把链表即时改了一下就是队列了. 还有想了一下,决定这种例程的代码放法是:先把测试代码默认折叠放在前面,然后把实现代码默认展开放在后面. 测试代码如下: #include &l ...
- SQL Prompt9 注册教程
在网上找了很多,都是9.0一下的版本,所以这边来发个9.0的版本 然后下载的安装文件应该包括 这两个: 第一个是注册机,第二个是安装包,安装这里就不用讲了,下一步下一步就完事,安装完成之后,一定要断网 ...
- Java并发编程之验证volatile不能保证原子性
Java并发编程之验证volatile不能保证原子性 通过系列文章的学习,凯哥已经介绍了volatile的三大特性.1:保证可见性 2:不保证原子性 3:保证顺序.那么怎么来验证可见性呢?本文凯哥(凯 ...
- centos下配置Nginx
首先NGINX是一个高效的HTTP和反向代理的服务器,这里记录一下它的安装方式和文件结构方便以后查看.同时Linux系统具有灵活性,其他的东西可查看具体的官网信息:https://nginx.org/ ...
- java-随机点名器(新手)
//创建的一个包名. package qige; //导入一个包.import java.util.Random; //定义一个类.public class Zy1 { //公共静态的主方法. pub ...