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)

说明:

  1. 从上面可以很容易的看出来, 使用namedtuple可以很容易定义出一种数据类型
  2. 他具备tuple的不可变性, 又能根据属性来引用, 一个字:用起来就是爽
  3. 定义一个表示平面的圆: 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用来统计集合中元素出现的次数.

Counterdict的子类, 每个键值对都表示元素和元素出现的次数.

创建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(函数)

说明:

  1. 如果访问的key不存在, 则会调用传递的函数, 把函数作为value
  2. 其余的使用和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模块的更多相关文章

  1. Python第十一章-常用的核心模块03-json模块

    python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...

  2. Python第十一章-常用的核心模块04-datetime模块

    python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...

  3. python的常用模块之collections模块

    python的常用模块之collections模块 python全栈开发,模块,collections 认识模块 什么是模块?    常见的场景:一个模块就是一个包含了python定义和声明的文件,文 ...

  4. Python 常用模块(1) -- collections模块,time模块,random模块,os模块,sys模块

    主要内容: 一. 模块的简单认识 二. collections模块 三. time时间模块 四. random模块 五. os模块 六. sys模块 一. 模块的简单认识 模块: 模块就是把装有特定功 ...

  5. Python模块01/自定义模块/time模块/datetime模块/random模块

    Python模块01/自定义模块/time模块/datetime模块/random模块 内容大纲 1.自定义模块 2.time模块 3.datetime模块 4.random模块 1.自定义模块 1. ...

  6. 模块二之序列化模块以及collections模块

    模块二之序列化模块以及collections模块 一.序列化模块 json模块 ''' 序列化:将python或其他语言的数据类型转换成字符串类型 json模块: 是一个序列化模块. json: 是一 ...

  7. 《Python》常用模块之collections模块

    内置的数据类型: int  float  complex str  list  tuple dict  set 基础数据类型: int  float  complex str  list  tuple ...

  8. python常见模块之collections模块

    一.模块简介 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict.namedtu ...

  9. 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)

    认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...

随机推荐

  1. LeetCode 32,并不Hard的难题,解法超级经典,带你领略动态规划的精彩

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天给大家分享的是LeetCode当中的32题,这是一道Hard难度的题.也是一道经典的字符串处理问题,在接下来的文章当中,我们会详细地解读 ...

  2. 深度学习遥感影像(哨兵2A/B)超分辨率

    这段时间,用到了哨兵影像,遇到了一个问题,就是哨兵影像,它的RGB/NIR波段是10米分辨率的,但是其他波段是20米和60米的,这就需要pansharpening了,所以我们需要设计一种算法来进行解决 ...

  3. 想要成为一名优秀的Java程序员,你需要这8个锦囊

    私底下,隔三差五就有读者问我:"二哥,怎么样才能像你一样,成为一名优秀的 Java 开发者呢?"假如把"怎么才能像你一样"去掉的话,这个问题就是一个好问题,否则 ...

  4. @Mapper与@Repository区别

    @Mapper:是mybatis-plus注解 @Repository:是spring注解 @Mapper= @Repository + @MapperScan(basePackages = &quo ...

  5. htmlhint 规则详解

    HTML 静态检查规则 HTMLHint 工具内置 23 条规则,可以对 HTML 代码文件进行静态代码检查,从而提高 HTML 代码编写的规范和质量.现在把 23 条规则翻译如下. 一.规则列表 标 ...

  6. TensorFlow CPU环境 SSE/AVX/FMA 指令集编译

    TensorFlow CPU环境 SSE/AVX/FMA 指令集编译 sess.run()出现如下Warning W tensorflow/core/platform/cpu_feature_guar ...

  7. SpringCloud第二代实战系列:一文搞定Nacos实现服务注册与发现

    一.背景:SpringCloud 生态圈 在正式开始本篇文章之前我们先岔开来讲一下SpringCloud的生态圈. SpringCloud大家都比较熟悉了,它制定了分布式系统的标准规范,做了高度抽象和 ...

  8. NLP(二十四)利用ALBERT实现命名实体识别

      本文将会介绍如何利用ALBERT来实现命名实体识别.如果有对命名实体识别不清楚的读者,请参考笔者的文章NLP入门(四)命名实体识别(NER) .   本文的项目结构如下:   其中,albert_ ...

  9. 波兰政府在继韩国之后也增加了对 Linux 的使用

    导读 前段时间, 韩国政府起草了一项战略,准备采用基于 Linux 的开源操作系统全面取代 Windows 7,以摆脱对其的依赖. 目前,波兰的社会保险公司 ZUS( Zakład Ubezpiecz ...

  10. Python 执行 javascript PyExecJS 模块

    PyExecJS 安装 pip install PyExecJS PyExecJS 的基本使用: >>> import execjs >>> execjs.eval ...