当前位置:首页>python>【跟着AI学Python】Python常用内置模块:collections 模块和 math 模块

【跟着AI学Python】Python常用内置模块:collections 模块和 math 模块

  • 2026-09-02 19:06:51
【跟着AI学Python】Python常用内置模块:collections 模块和 math 模块
【Qwen-MAX】

Python 的标准库非常强大,除了我们之前聊过的 re 和 json,collections 和 math 也是开发中极高频使用的两个模块。

简单来说:

  • collections:提供了更高级、更智能的数据结构(容器),让你处理列表、字典时更优雅高效。
  • math:提供了更丰富的数学函数和常量,满足科学计算和复杂运算的需求。

下面我为你详细拆解这两个模块的核心用法。


📦 collections 模块:高级容器

这个模块是对 Python 内置容器(如 list, dict, tuple)的扩展,提供了 5 个非常实用的数据类型。

1. Counter:计数器

这是数据分析师最爱用的工具之一。它可以快速统计可哈希对象(如字符串、数字)出现的次数。

  • 特点:返回一个字典子类,键是元素,值是出现次数。
  • 场景:词频统计、票数统计。
from collections import Counter# 统计列表中元素出现的次数words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']count = Counter(words)print(count) # 输出: Counter({'apple': 3, 'banana': 2, 'orange': 1})# 获取出现次数最多的前2个元素print(count.most_common(2)) # 输出: [('apple', 3), ('banana', 2)]

2. defaultdict:默认字典

普通字典在访问不存在的键时会报错 KeyError,而 defaultdict 会自动为不存在的键创建一个默认值。

  • 特点:初始化时需传入一个工厂函数(如 int, list)。
  • 场景:分组数据、累加计算。
from collections import defaultdict# 默认值为 int(),即 0dd = defaultdict(int)dd['a'] = 1# 访问不存在的键 'b',不会报错,而是自动创建并赋值为 0print(dd['b'])  # 输出: 0# 场景:按颜色分组水果fruits = [('apple', 'red'), ('banana', 'yellow'), ('grape', 'purple'), ('cherry', 'red')]groups = defaultdict(list)for fruit, color in fruits:    groups[color].append(fruit)print(groups)

3. namedtuple:具名元组

它让你可以像访问对象属性一样访问元组元素,解决了普通元组通过索引访问可读性差的问题(比如 p[0] 不如 p.x 直观)。

  • 特点:内存占用与普通元组相同,但代码可读性极高。
  • 场景:定义简单的数据结构(如坐标点、数据库记录)。
from collections import namedtuple# 定义一个 Point 类型Point = namedtuple('Point', ['x', 'y'])p = Point(10, 20)# 像访问属性一样访问print(p.x)  # 输出: 10print(p.y)  # 输出: 20# 依然支持元组的特性print(p[0]) # 输出: 10

4. deque:双端队列

这是一个线程安全的双端队列,支持在队列两端高效地添加或删除元素(时间复杂度 O(1))。相比之下,列表在头部插入元素的效率很低(O(n))。

  • 特点:支持 append, appendleft, pop, popleft。
  • 场景:实现栈、队列、滑动窗口。
from collections import dequedq = deque([1, 2, 3])dq.append(4)        # 右端添加dq.appendleft(0)    # 左端添加print(dq)           # 输出: deque([0, 1, 2, 3, 4])dq.popleft()        # 左端弹出print(dq)           # 输出: deque([1, 2, 3, 4])

🧮 math 模块:数学运算

math 模块提供了基于 C 标准库的数学函数,适用于浮点数计算和科学计算。

1. 常用常量

  • math.pi:圆周率 π (≈ 3.14159)
  • math.e:自然对数的底数 e (≈ 2.71828)

2. 核心函数速览

函数
功能
示例
math.ceil(x)
向上取整
math.ceil(4.2)
 → 5
math.floor(x)
向下取整
math.floor(4.8)
 → 4
math.sqrt(x)
平方根
math.sqrt(16)
 → 4.0
math.pow(x, y)
x 的 y 次方
math.pow(2, 3)
 → 8.0
math.factorial(x)
阶乘
math.factorial(5)
 → 120
math.gcd(a, b)
最大公约数
math.gcd(48, 18)
 → 6
math.fsum(iterable)
高精度求和
避免浮点数累加精度丢失

3. 实战代码示例

import math# 1. 计算圆的面积r = 5area = math.pi * r ** 2print(f"圆面积: {area}")  # 输出: 78.5398...# 2. 向上取整(常用于分页计算)total_items = 103items_per_page = 10pages = math.ceil(total_items / items_per_page)print(f"总页数: {pages}")  # 输出: 11# 3. 计算直角三角形斜边# 等价于 math.sqrt(a**2 + b**2)c = math.hypot(3, 4)print(f"斜边长度: {c}")  # 输出: 5.0# 4. 对数运算# 计算以 2 为底 8 的对数log_val = math.log(8, 2)print(f"log2(8): {log_val}")  # 输出: 3.0

📌 总结

  • 如果你需要统计频率、处理队列或定义简单数据结构,请首选 collections。
  • 如果你需要进行几何计算、取整或复杂的数学变换,请使用 math。

这两个模块都是 Python 标准库的一部分,无需安装即可直接 import 使用,是提升代码质量和效率的必备工具。

最新文章

随机文章