Python中tqdm进度条工具和enumerate函数的使用详解
tqdm进度条工具
tqdm
是 Python 中一个非常流行的 进度条显示工具库,常用于迭代操作的可视化,比如训练神经网络、批量数据处理等任务。
一、tqdm
是什么?
tqdm
全称是 taqaddum(阿拉伯语,意为“进展”),它会在控制台输出一个带进度条的实时反馈,常用于 for
循环中追踪当前执行状态和速度。
二、常用方法
1. 对普通 for
循环添加进度条
from tqdm import tqdm
for i in tqdm(range(100)):# 模拟耗时任务time.sleep(0.01)
2. 与 DataLoader
搭配(最常见)
from tqdm import tqdm
for batch in tqdm(trainloader):# 处理 batchpass
3. 自定义描述信息
for i in tqdm(range(100), desc="Processing"):time.sleep(0.01)
4. 显示时间与速率信息
tqdm
会自动显示:
- 当前进度
- 已耗时间
- 平均耗时
- 预计剩余时间
例如:
Processing: 45%|██████████████████▋ | 45/100 [00:01<00:01, 34.56it/s]
5. 嵌套进度条(多层循环)
from tqdm import tqdm
for i in tqdm(range(3), desc="Outer loop"):for j in tqdm(range(100), desc="Inner loop", leave=False):time.sleep(0.01)
三、使用注意事项
问题 | 建议 |
---|---|
卡住无响应? | 避免在 Jupyter 中用旧版本 tqdm ,使用 tqdm.notebook 替代 |
速度不准? | 小任务迭代速度快可能导致显示误差大,可加 mininterval=0.5 |
配合 DataLoader 卡顿? | 添加 num_workers=0 测试排查线程冲突 |
重定向被清空? | 若与 print() 频繁混用建议设 tqdm(..., leave=True) |
四、完整代码示例
from tqdm import tqdm
import timeprint("普通进度条演示:")
for i in tqdm(range(50), desc="任务A"):time.sleep(0.02)print("\n嵌套进度条演示:")
for epoch in tqdm(range(2), desc="Epoch"):for batch in tqdm(range(10), desc="Batch", leave=False):time.sleep(0.05)
五、进阶用法(如更新、写日志)
from tqdm import tqdm
import timepbar = tqdm(total=100)
for i in range(10):time.sleep(0.1)pbar.update(10)
pbar.close()
六、安装
pip install tqdm
在 Jupyter Notebook 中建议使用:
from tqdm.notebook import tqdm
enumerate函数
enumerate
是 Python 的一个内建函数,用于在遍历可迭代对象(如列表、元组等)时,同时获得元素的索引和值。相比使用传统的 range(len(x))
方式,enumerate
更简洁、可读性更强,是写 Pythonic 代码的重要工具。
一、基本语法
enumerate(iterable, start=0)
参数 | 说明 |
---|---|
iterable | 可迭代对象(如列表、字符串、元组、集合、字典等) |
start | 起始索引,默认是 0,也可以设定为任意整数 |
二、基本示例
fruits = ["apple", "banana", "cherry"]for index, fruit in enumerate(fruits):print(index, fruit)
输出:
0 apple
1 banana
2 cherry
三、与传统 range(len(...))
的对比
✅ 推荐写法:
for i, val in enumerate(my_list):...
不推荐写法:
for i in range(len(my_list)):val = my_list[i]...
使用 enumerate
语义更清晰、减少索引出错。
四、start
参数作用
可以自定义索引起始值:
for i, fruit in enumerate(fruits, start=1):print(f"第{i}个水果是 {fruit}")
输出:
第1个水果是 apple
第2个水果是 banana
第3个水果是 cherry
五、常见用法场景
1. 遍历列表时获取索引
names = ["Alice", "Bob", "Charlie"]
for i, name in enumerate(names):print(f"{i}: {name}")
2. 与字典构造器配合使用
d = dict(enumerate(["a", "b", "c"]))
print(d) # {0: 'a', 1: 'b', 2: 'c'}
3. 使用 enumerate
修改可变对象
nums = [1, 2, 3]
for i, num in enumerate(nums):nums[i] = num ** 2
print(nums) # [1, 4, 9]
4. 配合 zip()
遍历多个列表并附带索引
a = ["x", "y", "z"]
b = [10, 20, 30]
for idx, (ai, bi) in enumerate(zip(a, b)):print(f"{idx}: {ai} - {bi}")
六、使用注意事项
问题 | 建议或说明 |
---|---|
只能用于可迭代对象 | 否则抛出 TypeError |
可用于字符串、元组、列表、集合、字典等 | 注意集合和字典遍历顺序是无序的(除非使用 OrderedDict 或 Python 3.7+) |
不能直接修改不可变对象(如字符串) | 修改要借助列表或其它中间变量 |
注意 enumerate 返回的是迭代器 | 想多次使用可以 list(enumerate(...)) |
七、进阶示例
1. 从 enumerate
得到索引和值,并过滤条件
items = ["car", "bike", "train", "plane"]
for i, item in enumerate(items):if "a" in item:print(f"Index {i}: {item}")
2. 解包 enumerate
生成器
e = enumerate(["A", "B", "C"], start=10)
print(list(e)) # [(10, 'A'), (11, 'B'), (12, 'C')]
3. 使用 enumerate
生成 <index, value>
字符串格式
for i, ch in enumerate("abc", 1):print(f"{i}: {ch.upper()}")
输出:
1: A
2: B
3: C
八、与 tqdm 配合使用(进度+索引)
from tqdm import tqdmfor i, data in enumerate(tqdm(dataloader)):# i 是 batch 的编号pass
九、结语
enumerate()
是你写优雅、清晰、高效 Python 循环结构的必备技能,特别适用于:
- 遍历时需要索引信息
- 提高可读性、避免
range(len(...))
出错 - 搭配列表推导或
zip()
使用更灵活
相关文章:
Python中tqdm进度条工具和enumerate函数的使用详解
tqdm进度条工具 tqdm 是 Python 中一个非常流行的 进度条显示工具库,常用于迭代操作的可视化,比如训练神经网络、批量数据处理等任务。 一、tqdm 是什么? tqdm 全称是 taqaddum(阿拉伯语,意为“进展”)&a…...

最宽温度范围文本格式PT1000分度表-200~850度及PT1000铂电阻温度传感器计算公式
常用PT铂电阻温度传感器 该图片来自网络,在此对图片作者表示感谢。 白色陶瓷面为测温面。 近距离图片。 常用的有PT100、PT500、PT1000,不常用的还有 PT50、PT200、PT10000等,PT代表铂电阻,后面的数字是零摄氏度时电阻值&#…...
基于Netty架构的充电桩系统设计:服务器运维如何更好保障稳定性?
Netty是一个异步事件驱动的网络应用框架,用于快速开发高性能、高可靠性的网络服务器和客户端。它本质上是NIO的封装和增强,主要针对TCP/IP协议下高性能网络通信场景。 本设计通过Netty的高性能网络通信能力,结合充电桩行业特性,实…...
操作系统学习笔记第1章 操作系统概述(灰灰题库
1.单选题 用户发起系统服务请求时,处理器处于______。 A. 用户态 B. 核心态 C. 阻塞态 D. 挂起态 第 1 题 答案:A 解析:用户态下,用户程序只能执行非特权指令 。当用户发起系统服务请求(通常通过系统调用)时…...
后端开发实习生-抖音生活服务
职位描述 ByteIntern:面向2026届毕业生(2025年9月-2026年8月期间毕业),为符合岗位要求的同学提供转正机会。 团队介绍:生活服务业务依托于抖音、抖音极速版等平台,致力于促进用户与本地服务的连接。过去一…...

机器学习算法-sklearn源起
scikit-learn(简称 sklearn)是 Python 中最流行的开源机器学习库之一,基于 NumPy、SciPy 和 Matplotlib 构建。它提供了丰富的机器学习算法和工具,适用于数据挖掘和数据分析任务。以下是其核心特点的简介: 1、sklearn主…...
Keepalived 在不同场景下的高可用方案设计与最佳实践
一、Keepalived 典型应用场景深度解析 1. Web 服务器集群:统一入口与故障容错 1.1 场景需求 核心目标:为多台 Web 服务器提供统一 VIP 入口,隐藏后端节点细节,实现故障透明切换。 挑战: 确保用户请求在主节点故障时…...

注册并创建一个微信小程序
目录 (一)前往微信公众平台,并注册一个微信小程序账号 (二)配置微信小程序 (三)创建微信小程序项目 1.流程 1.1获取小程序ID 1.2下载微信开发者工具 1.3安装微信开发者工具 2.创建项目…...
CentOS 10:启动telnet服务
参考, 鳥哥私房菜 - 第七章、網路安全與主機基本防護:限制埠口, 網路升級與 SELinux 7.3.3 埠口与服务的启动/关闭及开机时状态设定 我们知道系统的 Telnet 服务通常是以 super daemon 来控管的,请您启动您系统的 telnet 试看看。 1 要启动 …...

计算机网络——每一层的用到的设备及其作用
计算机网络基础 OSI参考模型TCP/IP协议族集线器(Hub)交换机(Switch)路由器(Router)功能特点无线路由器(家庭宽带)光猫功能 网关(Gateway)功能应用场景特点 IP…...
OpenLayers 加载鹰眼控件
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图控件是一些用来与地图进行简单交互的工具,地图库预先封装好,可以供开发者直接使用。OpenLayers具有大部分常用的控件&#x…...
Eigen与OpenCV矩阵操作全面对比:最大值、最小值、平均值
功能对比总表 功能Eigen 方法OpenCV 方法主要区别最大值mat.maxCoeff(&row, &col)cv::minMaxLoc(mat, NULL, &maxVal, NULL, &maxLoc)Eigen需要分开调用,OpenCV一次获取最小值mat.minCoeff(&row, &col)cv::minMaxLoc(mat, &minVal, NU…...
安全基础与协议分析
5.1 Web安全基础 5.1.1 Web安全基础概览(一、二) Web安全的核心目标是保护Web应用及其数据免受攻击,涵盖以下关键领域: 攻击面: 前端漏洞(XSS、CSRF)。 后端漏洞(SQL注入、RCE&a…...

【Web前端】JavaScript入门与基础(一)
JavaScript简介 JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”,指的是它不具备开发操作系统的能力,而是只用来编写控制其他大型应用程序的“脚本”。 JavaScript 是一种嵌入式(embedded)语言。它本身提供的核心语法不算…...
第一课:医学影像研究的科学思维与问题提出
课程目标: 理解科学思维在医学影像研究中的核心地位。掌握从临床实践、文献回顾及技术进展中发现医学影像研究问题的方法。学习如何凝练、评估并清晰表述一个具有研究价值的医学影像科学问题。熟悉医学影像研究问题提出的伦理考量。课程大纲与核心内容: 引言 医学影像研究的…...

前端大文件上传性能优化实战:分片上传分析与实战
前端文件分片是大文件上传场景中的重要优化手段,其必要性和优势主要体现在以下几个方面: 一、必要性分析 1. 突破浏览器/服务器限制 浏览器限制:部分浏览器对单次上传文件大小有限制(如早期IE限制4GB) 服务器限制&a…...
数据的获取与读取篇---常见的数据格式JSON
文件格式 假如你有一份想分析的数据文件,获得文件后下一步就是用代码读取它。不同的文件格式有不同的读取方法。所以读取前了解文件格式也很重要。你可能见过非常多的文件格式,例如TXT、MP3、PDF、JPEG等等。 一般可以通过文件的后缀来分辨文件的格式,例如TXT格式,一般保存…...
【python代码】一些小实验
目录 1. 测试Resnet50 ONNX模型的推理速度 1. 测试Resnet50 ONNX模型的推理速度 ############################### # 导出resnet50 模型 # 测试onnx模型推理 cpu 和 GPU 的对比 ###############################import time import numpy as np import onnxruntime as ort im…...

Linux服务器配置深度学习环境(Pytorch+Anaconda极简版)
前言: 最近做横向需要使用实验室服务器跑模型,之前用师兄的账号登录服务器跑yolo,3张3090一轮14秒,我本地一张4080laptop要40秒,效率还是快很多,(这么算一张4080桌面版居然算力能比肩3090&#…...
Vue-创建应用/挂载应用/根组件模版-.vue单文件/应用配置
目录 应用实例 根组件 挂载应用 容器元素自己将不会被视为应用的一部分 那为什么还要在被挂载标签里面写东西呢? .mount( ) 方法应该始终在整个应用配置和资源注册完成后被调用 什么是资源注册? 什么是应用实例? 什么是根实例&#…...

超低延迟音视频直播技术的未来发展与创新
引言 音视频直播技术正在深刻改变着我们的生活和工作方式,尤其是在教育、医疗、安防、娱乐等行业。无论是全球性的体育赛事、远程医疗、在线教育,还是智慧安防、智能家居等应用场景,都离不开音视频技术的支持。为了应对越来越高的需求&#x…...
虚拟文件(VFS)
核心知识点:虚拟文件系统(VFS) 1. 通俗易懂的解释 想象一下你家里的冰箱。你把食物放进去,不用管它是放在塑料盒里、玻璃罐里还是直接用保鲜膜包着,你只需要知道它在冰箱的哪个位置(比如“蔬菜抽屉里”&a…...

Java 内存模型(JMM)深度解析:理解多线程内存可见性问题
Java 内存模型(JMM)深度解析:理解多线程内存可见性问题 在 Java 编程中,多线程的运用能够显著提升程序的执行效率,但与此同时,多线程环境下的一些问题也逐渐凸显。其中,内存可见性问题是一个关…...

转移dp简单数学数论
1.转移dp问题 昨天的练习赛上有一个很好玩的起终点问题,第一时间给出bfs的写法。 但是写到后面发现不行,还得是的dp转移的写法才能完美的解决这道题目。 每个格子可以经过可以不经过,因此它的状态空间是2^(n*m)&…...
【大模型面试每日一题】Day 27:自注意力机制中Q/K/V矩阵的作用与缩放因子原理
【大模型面试每日一题】Day 27:自注意力机制中Q/K/V矩阵的作用与缩放因子原理 📌 题目重现 🌟🌟 面试官:请解释Transformer自注意力机制中Query、Key、Value矩阵的核心作用,并分析为何在计算注意力分数时…...
Ubuntu24.04 LTS安装java8、mysql8.0
在 Ubuntu 24.04 上安装 OpenJDK OpenJDK 包在 Ubuntu 24.04 的默认存储库中随时可用。 打开终端并运行以下 apt 命令: sudo apt update查看是否已经安装java java --version如果未安装会有提示,直接复制命令安装即可,默认版本: sudo apt in…...

动静态库--
目录 一 静态库 1. 创建静态库 2. 使用静态库 2.1 第一种 2.2 第二种 二 动态库 1. 创建动态库 2. 使用动态库 三 静态库 VS 动态库 四 动态库加载 1. 可执行文件加载 2. 动态库加载 一 静态库 Linux静态库:.a结尾 Windows静态库:.lib结尾…...
【检索增强生成(RAG)全解析】从理论到工业级实践
目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🧠 一、技术原理剖析📊 核心架构图解💡 核心工作流程🔧 关键技术模块⚖️ 技术选型对…...

git clone时出现无法访问的问题
git clone时出现无法访问的问题 问题: 由于我的git之前设置了代理,然后在这次克隆时又没有打开代理 解决方案: 1、如果不需要代理,直接取消 Git 的代理设置: git config --global --unset http.proxy git config --gl…...
Lesson 22 A glass envelope
Lesson 22 A glass envelope 词汇 dream v. 做梦,梦想 n. 梦 用法:1. have a dream 做梦 2. have a good / sweet dream 做个好梦 [口语晚安] 3. dream about 人/物 梦到…… 4. dream that 句子 梦到…… 例句:他昨晚…...