collections,让Python开发更高效

介绍

collections 模块是 Python 标准库的一部分,提供了多种增强的数据类型,包括 namedtupledequeCounterOrderedDictdefaultdictChainMap

这些数据类型比内置类型更灵活高效,适用于特定场景。掌握和合理使用这些数据结构,你会发现日常开发效率会非常高。

常见数据结构

namedtuple

namedtuple 是 Python collections 模块中的一个工厂函数,用于创建具有命名字段的不可变序列。它提供了类似于元组的性能和内存效率,同时可以通过名称访问其元素,从而提高代码的可读性可维护性

下面通过一段关于操作 地理坐标(Geolocation) 的代码来详细说明:如何创建 namedtuple、访问其元素,以及 namedtuple 的方法和属性。

# 导入
from collections import namedtuple

# 定义 namedtuple 类型 Geo
Geo = namedtuple('Geo', ['latitude', 'longitude'])

# 创建几个 Geo 实例
a_geo = Geo(39.9042, 116.4074)
b_geo = Geo(31.2304, 121.4737)
c_geo = Geo(23.1291, 113.2644)

# 打印地理坐标
print(f"a_geo: {
     a_geo.latitude}, {
     a_geo.longitude}")  # 输出: a_geo: 39.9042, 116.4074
print(f"b_geo: {
     b_geo.latitude}, {
     b_geo.longitude}")  # 输出: b_geo: 31.2304, 121.4737
print(f"c_geo: {
     c_geo.latitude}, {
     c_geo.longitude}")  # 输出: c_geo: 23.1291, 113.2644

# 使用 _make() 方法创建实例
data = [22.5431, 114.0579]
d_geo = Geo._make(data)
print(f"d_geo: {
     d_geo.latitude}, {
     d_geo.longitude}")  # 输出: d_geo: 22.5431, 114.0579

# 使用 _asdict() 方法将 namedtuple 转换为字典
a_dict = a_geo._asdict()
print(a_dict)  # 输出: OrderedDict([('latitude', 39.9042), ('longitude', 116.4074)])

# 使用 _replace() 方法更新实例
updated_a = a_geo._replace(latitude=39.913818)
print(updated_a)  # 输出: Geo(latitude=39.913818, longitude=116.4074)

# 查看字段名称
print(Geo._fields)  # 输出: ('latitude', 'longitude')
应用场景
  • 数据记录:用于表示数据库查询结果或日志记录。
  • 配置项:用于保存配置信息,例如服务器配置或应用程序设置。
  • 数据传输:用于定义消息格式,方便序列化和传输数据。

deque

deque 是一个双端队列,它支持从两端进行高效的添加和删除操作。

基本使用

deque 支持从两端进行快速的添加和删除操作。

from collections import deque

# 创建一个空的 deque
my_deque = deque()

# 创建包含元素的 deque
my_deque_with_data = deque([1, 2, 3, 4, 5])

# 添加元素到 deque 的右端
my_deque.append(6)

# 添加元素到 deque 的左端
my_deque.appendleft(0)

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值