Python第十一章-常用的核心模块01-collections模块

栏目: IT技术 · 发布时间: 4年前

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

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

本章主要介绍 python 的一些内置常用核心模块

Python 常用的核心模块

一、collections模块

这是个有用的容器模块, 提供了许多有用的集合,来弥补通用的内置容器: list, dict, tuple, set

Python第十一章-常用的核心模块01-collections模块

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)

Python第十一章-常用的核心模块01-collections模块

说明:

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)

Python第十一章-常用的核心模块01-collections模块

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)

Python第十一章-常用的核心模块01-collections模块

实例方法: _asdict()

返回一个列表(从3.1f开始是一个 OrderedDict )

from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
p1 = Point(10, 20)
d = p1._asdict()
print(d)

Python第十一章-常用的核心模块01-collections模块

实例方法: _replace(关键字参数)

更改某个属性的值, 由于 namedtuple 是不可变的, 所以返回的是一个新的 namedtuple 实例对象

from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
p1 = Point(10, 20)
p2 = p1._replace(y=100)
print(p2)

Python第十一章-常用的核心模块01-collections模块

类属性: _source

返回创建的类的源码

类属性: _fields

返回创建类的所有属性

from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
print(Point._fields)

Python第十一章-常用的核心模块01-collections模块

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)

Python第十一章-常用的核心模块01-collections模块

方法和属性

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)

Python第十一章-常用的核心模块01-collections模块

有用的几个方法

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)

Python第十一章-常用的核心模块01-collections模块

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()))

Python第十一章-常用的核心模块01-collections模块

from collections import defaultdict
# 统计每个字符出现的次数
s = "abcdabAbc"

d = defaultdict(int)
for k in s:
    d[k] += 1
    

print(sorted(d.items()))

Python第十一章-常用的核心模块01-collections模块

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模块


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

超级连接者:破解新互联时代的成功密码

超级连接者:破解新互联时代的成功密码

伊桑•祖克曼(ETHAN ZUCKERMAN) / 林玮、张晨 / 浙江人民出版社 / 2018-8-1 / CNY 72.90

● 我们生活在一个互联互通的世界,我们需要辩证地看待某些事件,发现隐藏在背后的真相。着眼当下,看清彼此之间的联系,而非凭空幻想未来世界联系之紧密。数字世界主义要求我们承担起责任,让隐藏的联系变成现实。 ● 我们对世界的看法是局限的、不完整的、带有偏见的。如果我们想要改变从这个广阔的世界所获取的信息,我们需要做出结构性的改变。 ● 建立联系是一种新的力量。无论是在国家层面、企业层面还是个......一起来看看 《超级连接者:破解新互联时代的成功密码》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

URL 编码/解码
URL 编码/解码

URL 编码/解码