当前位置: 首页 > news >正文

【Python 工具人快餐 · 第 2 份】

开袋即食

itertools 是「循环加速器」:
无限迭代器、排列组合、滑动窗口、分批读取……
全部惰性生成,内存永远只占一条缝。


1 行代码 4 连发

from itertools import count, islice, product, pairwisec = islice(count(10, 2), 5)      # [10,12,14,16,18]  无限迭代切 5 片
p = list(product('AB', repeat=2)) # [('A','A'), ('A','B'), ...]
w = list(pairwise(range(4)))      # [(0,1),(1,2),(2,3)]

场景实拍:大文件按 1 MB 块读取

需求:逐块处理 10 GB 日志,却不撑爆内存。

from pathlib import Path
from itertools import islicedef chunked(file, size=1_024_000):while chunk := file.read(size):yield chunkwith Path('giant.log').open('rb') as f:for piece in chunked(f):process(piece)          # 内存永远只有 1 MB

核心工具:iter(callable, sentinel) 的魔法,这里换成 while 更直观。


升级加料

  1. 组合:combinations('ABC', 2) → AB AC BC
  2. 累积:accumulate([1,2,3,4]) → 1 3 6 10
  3. 分组:groupby(sorted(data, key=key), key=key)

打包带走 : 循环太长?先看 itertools! 惰性迭代器,内存永动机。

http://www.dtcms.com/a/323420.html

相关文章:

  • 使用SPM进行核磁数据预处理
  • 【无标题】六边形结构在二维拓扑量子色动力学模型中确实具有独特优势,并构建完整的二维拓扑量子色动力学模型。
  • Redis三种特殊数据类型
  • 【深度学习2】logistic回归以及梯度下降
  • synchronized和RentrantLock用哪个?
  • Datawhale AI夏令营第三期,多模态RAG方向 Task2
  • 小白成长之路-Docker部署
  • 第二十八天(cookiesessiontokeny验证)
  • JVM性能调优的原则有哪些?
  • 深入理解C++构造函数与初始化列表
  • P1025 [NOIP 2001 提高组] 数的划分 题解
  • 【嵌入式DIY实例-Arduino篇】-水质检测系统
  • SQL面试题及详细答案150道(01-20) --- 基础概念与语法篇
  • python踩坑之识别错误...
  • 如何分析需求的可行性
  • Spring——Spring懒加载设计使用场景
  • 深入解析进程创建与终止机制
  • Linux 信号处理标志sa_flags详解
  • MPU-6050 超实用入门
  • 一文详解 C++ 继承体系
  • [C/C++线程安全]_[中级]_[多线程如何使用共享锁提升性能]
  • EP06:【DL 第二弹】动态计算图与梯度下降入门
  • 【C/C++】具有C风格的强制类型转换:显式类型转换、隐式类型转换,C语言强制类型转换
  • 第六章:【springboot】框架springboot原理、springboot父子工程与Swagger
  • 算法题(183):质量检测
  • 《答客难》东方朔
  • 网络原理-初识
  • FreeRTOS入门知识(初识RTOS任务调度)(三)
  • AVL树的四种旋转
  • 【Python 语法糖小火锅 · 第 4 涮】