百独托管7500 紫田网络超高转化播放器收cps[推荐]速盾CDN 免实名免备防屏蔽阿里云 爆款特卖9.9元封顶提升alexa、IP流量7Q5团队
【腾讯云】中小企福利专场【腾讯云】多款产品1折起高防 随时退换 好耶数据小飞国外网赚带你月入万元炎黄网络4H4G10M 99每月
香港带宽CN2/美国站群优惠中客数据中心 服务器租用联盟系统移动广告平台 中易企业专场腾讯云服务器2.5折九九数据 工信部正规资质
腾讯云新用户大礼包代金券高价收cpa注册量高价展示【腾讯云】2核2G/9.93起租服务器找45互联 随时退换阿里云 短信服务 验证秒达

[其它内容] 通过`collections`模块简化常见数据结构操作 [复制链接]
查看:140 | 回复:2

1477

主题

1656

帖子

9

积分

落伍者(一心一意)

Rank: 1

贡献
685
鲜花
0
注册时间
2016-6-22

落伍者落伍微信绑定落伍手机绑定

发表于 2024-8-13 16:12:50 | 显示全部楼层 |阅读模式 来自 中国江苏淮安
华科云商丑图1.jpg
在Python编程中,处理数据结构是日常开发中不可避免的一部分。虽然Python内置了许多基本的数据结构如列表、字典和集合,但在某些情况下,标准的数据结构可能并不足以满足特定的需求。幸运的是,Python的`collections`模块提供了一系列有用的容器数据类型,能够帮助开发者更高效地处理常见的数据结构操作。本文将介绍如何通过`collections`模块简化和优化这些操作。

1. `collections`模块概述

`collections`是Python标准库的一部分,提供了几种额外的容器数据类型,它们可以用来增强和替代内置的数据结构。常用的`collections`类型包括:

- `namedtuple()`: 创建命名元组

- `deque`: 双端队列,用于快速添加和删除元素

- `Counter`: 计数器,跟踪元素的出现次数

- `defaultdict`: 带有默认值的字典

- `OrderedDict`: 保持插入顺序的字典

- `ChainMap`: 多映射的组合

2. 使用`namedtuple`简化结构化数据处理

`namedtuple`是用于创建类似于元组的对象,除了具有元组的不可变性,还可以通过字段名访问数据,这使得代码更具可读性。

示例:

```python

from collections import namedtuple

# 定义一个Point命名元组

Point = namedtuple('Point', ['x', 'y'])

p = Point(11, 22)

print(p.x)  # 输出:11

print(p.y)  # 输出:22

```

使用`namedtuple`可以替代通常的字典或类定义,尤其在只需要存储少量属性且不需要方法的情况下。

3. 使用`deque`优化队列和栈操作

`deque`是双端队列,它允许从两端高效地添加和删除元素。与列表相比,`deque`在这些操作上具有更好的性能,特别是在处理大量元素时。

示例:

```python

from collections import deque

d = deque([1, 2, 3, 4])

d.append(5)        # 在右端添加元素

d.appendleft(0)    # 在左端添加元素

print(d)  # 输出:deque([0, 1, 2, 3, 4, 5])

d.pop()           # 移除右端元素

d.popleft()       # 移除左端元素

print(d)  # 输出:deque([1, 2, 3, 4])

```

`deque`对于需要频繁进行插入和删除操作的场景(如队列和栈)非常适用。

4. 使用`Counter`进行高效计数

`Counter`是一个非常实用的工具,它可以帮助我们轻松统计元素的出现次数,尤其在需要分析数据频率时。

示例:

```python

from collections import Counter

data = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']

counter = Counter(data)

print(counter)  # 输出:Counter({'apple': 3, 'banana': 2, 'orange': 1})

print(counter.most_common(1))  # 输出:[('apple', 3)]

```

`Counter`还提供了诸如元素求和、找出最常见元素等高级功能。

5. 使用`defaultdict`避免键错误

`defaultdict`是`dict`的子类,它为缺失的键提供了默认值,避免了在访问不存在的键时抛出`KeyError`。

示例:

```python

from collections import defaultdict

# 使用list作为默认工厂

dd = defaultdict(list)

dd['fruits'].append('apple')

dd['fruits'].append('banana')

print(dd)  # 输出:defaultdict(, {'fruits': ['apple', 'banana']})

```

使用`defaultdict`可以使代码更加简洁,避免手动检查键是否存在。

6. 使用`OrderedDict`保持插入顺序

在Python 3.7+中,标准字典已经开始保持插入顺序,但在更早版本中,`OrderedDict`是确保这一特性的必要工具。

示例:

```python

from collections import OrderedDict

od = OrderedDict()

od['apple'] = 1

od['banana'] = 2

od['orange'] = 3

print(od)  # 输出:OrderedDict([('apple', 1), ('banana', 2), ('orange', 3)])

```

`OrderedDict`可以确保在遍历或导出数据时,顺序与插入时一致。

7. 使用`ChainMap`组合多个字典

`ChainMap`将多个字典或映射合并为一个视图,允许在单个对象中访问多个字典的内容。

示例:

```python

from collections import ChainMap

dict1 = {'a': 1, 'b': 2}

dict2 = {'b': 3, 'c': 4}

cm = ChainMap(dict1, dict2)

print(cm['b'])  # 输出:2,优先使用第一个字典中的值

print(cm['c'])  # 输出:4,来自第二个字典

```

`ChainMap`非常适合需要在多个命名空间或上下文中查找值的场景。

通过本文的学习,我们了解了如何使用`collections`模块中的几种容器数据类型来简化常见的数据结构操作。这些工具不仅可以使代码更加简洁易读,还能显著提高执行效率。掌握这些技巧,可以帮助你在日常开发中更加高效地处理复杂的数据结构和操作。
企业专线拨号VPS动态IP派克斯ADSL本地拨号,联系QQ174629754
回复

使用道具 举报

4

主题

6019

帖子

5062

积分

落伍者(三羊开泰)

Rank: 3Rank: 3

贡献
1
鲜花
0
注册时间
2013-9-5

落伍微信绑定落伍手机绑定

发表于 2024-8-14 14:42:12 | 显示全部楼层 来自 中国河南郑州
[url]http://www.xxytxcl.cn/Article-detail-id-3598600.html[/url]
回复 支持 反对

使用道具 举报

372

主题

1万

帖子

647

积分

落伍者(一心一意)

Rank: 1

贡献
2388
鲜花
0
注册时间
2020-6-17

落伍手机绑定落伍者

发表于 2024-9-9 10:19:47 | 显示全部楼层 来自 中国河南许昌
愿收录[url=http://www.ytllck.com/news/gongsi/]超声波流量计[/url]
[url=http://www.ytllck.com/products/]流量计厂家[/url]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

论坛客服/商务合作/投诉举报:2171544 (QQ)
落伍者创建于2001/03/14,本站内容均为会员发表,并不代表落伍立场!
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!
落伍官方微信:2030286 邮箱:(djfsys@gmail.com|tech@im286.com)
© 2001-2014

浙公网安备 33060302000191号

浙ICP备11034705号 BBS专项电子公告通信管[2010]226号

  落伍法律顾问: ITlaw-庄毅雄

手机版|找回帐号|不能发帖?|Archiver|落伍者

GMT+8, 2024-11-25 01:00 , Processed in 0.056798 second(s), 34 queries , Gzip On.

返回顶部