python中的enumerate函数怎么用_python enumerate()函数的用法与技巧

33次阅读

iv>

enumerate函数用于在遍历序列时同时获取索引和值,其基本用法为for index, item in enumerate(iterable),默认索引起始为0;通过start参数可指定起始值,如start=1常用于生成行号;它适用于列表、元组、字符串等可迭代对象,广泛应用于数据处理、字典构建、日志报错等场景,相比range(len())更简洁安全,提升了代码可读性和维护性。

<img src="https://img.php.cn/upload/article/001/431/639/175792572182054.png" alt="python中的enumerate函数怎么用_python enumerate()函数的用法与技巧">

Python中的iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>函数,说白了,就是让你在遍历一个序列的时候,能同时拿到每个元素的“序号”(也就是索引)和它本身的值。这玩意儿在很多场景下都特别方便,省去了我们自己维护一个计数器的麻烦,让代码看起来更干净、更“Pythonic”。

解决方案

iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>函数的基本用法非常直观。它接受一个可迭代对象(比如列表、元组、字符串),然后返回一个迭代器,这个迭代器每次会生成一个包含iv style="position:relative; padding:0px; margin:0px;">

(索引, 值)

iv>iv>iv>的元组。

看个简单的例子你就明白了:

iv style="position:relative; padding:0px; margin:0px;">

my_list = ['apple', 'banana', 'cherry']  # 最直接的用法 for index, item in enumerate(my_list):     print(f"索引 {index}: {item}")  # 输出: # 索引 0: apple # 索引 1: banana # 索引 2: cherry

iv>iv>iv>

它本质上就是把你的序列包装了一下,每次迭代的时候,除了给你元素本身,还附赠了一个从0开始的计数器。我个人觉得,这比我们以前那种“先用iv style="position:relative; padding:0px; margin:0px;">

range(len(my_list))

iv>iv>iv>拿到索引,再用iv style="position:relative; padding:0px; margin:0px;">

my_list[index]

iv>iv>iv>取值”的方式,简直是优雅太多了。

立即学习ion: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">Python免费学习笔记(深入)”;

为什么选择iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate()

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>而不是iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

range(len())

iv>iv>iv>iv>iv>iv>?

说实话,刚接触Python的时候,很多人(包括我自己在内)在需要索引和值的时候,第一反应可能都是iv style="position:relative; padding:0px; margin:0px;">

for i in range(len(some_list)): item = some_list[i]

iv>iv>iv>。这种写法虽然能解决问题,但总觉得有点笨拙,而且隐藏着一些潜在的“坑”。

iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate()

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>的出现,就是为了解决这种痛点,它让代码更具可读性和安全性。你想啊,当你在一个循环里同时需要索引和值时:

iv style="position:relative; padding:0px; margin:0px;">

# 传统方式,需要两步操作 data = ['A', 'B', 'C'] for i in range(len(data)):     item = data[i]     print(f"传统方式 - 索引 {i}: {item}")  # enumerate方式,一步到位 for index, item in enumerate(data):     print(f"enumerate方式 - 索引 {index}: {item}")

iv>iv>iv>

很明显,iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>的版本不仅代码量更少,更重要的是,它把“获取索引”和“获取值”这两个紧密相关的操作,用一个函数调用就完美地结合起来了。这避免了你在iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

range(len())

iv>iv>iv>iv>iv>iv>里写错变量名,或者在复杂的循环逻辑中,不小心把iv style="position:relative; padding:0px; margin:0px;">

i

iv>iv>iv>和iv style="position:relative; padding:0px; margin:0px;">

data[i]

iv>iv>iv>搞混。尤其是在处理一些长列表或者多层嵌套的循环时,iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>的优势就更明显了,它能大幅度降低代码的认知负担,让你的大脑更专注于业务逻辑,而不是索引管理。

iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate()

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>函数有哪些高级用法和参数?

iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate()

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>函数其实比你想象的要灵活一些,它有一个可选的iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

start

iv>iv>iv>iv>iv>iv>iv>iv>iv>参数,这在某些特定场景下非常有用。

默认情况下,iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>是从索引0开始计数的,这是Python的惯例。但有时候,我们的需求可能并不是从0开始。比如,你可能想模拟一个从1开始的行号,或者从某个特定的数字开始编号。这时候,iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

start

iv>iv>iv>iv>iv>iv>iv>iv>iv>参数就派上用场了:

iv style="position:relative; padding:0px; margin:0px;">

tasks = ['写报告', '开会', '回复邮件']  # 默认从0开始 print("--- 默认从0开始 ---") for i, task in enumerate(tasks):     print(f"任务 {i}: {task}")  # 从1开始计数,更像我们日常的序号 print("n--- 从1开始计数 ---") for i, task in enumerate(tasks, start=1):     print(f"任务 {i}: {task}")  # 输出: # --- 默认从0开始 --- # 任务 0: 写报告 # 任务 1: 开会 # 任务 2: 回复邮件 # # --- 从1开始计数 --- # 任务 1: 写报告 # 任务 2: 开会 # 任务 3: 回复邮件

iv>iv>iv>

这个iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

start

iv>iv>iv>iv>iv>iv>iv>iv>iv>参数的设计,我个人觉得非常贴心。它避免了我们为了一个非零的起始索引,又得自己去写iv style="position:relative; padding:0px; margin:0px;">

index + 1

iv>iv>iv>这样的逻辑。直接在函数调用时指定,既清晰又不容易出错。

iv> i/storyd"><img src="https://img.php.cn/upload/ai_manual/001/503/042/68b6d2df4c212213.png" alt="python中的enumerate函数怎么用_python enumerate()函数的用法与技巧"> iv> i/storyd">STORYD

帮你写出让领导满意的精美文稿

iv> <img src="https://phps.yycxw.com/static/images/card_xiazai.png" alt="python中的enumerate函数怎么用_python enumerate()函数的用法与技巧">102 iv> iv> i/storyd"> 查看详情 <img src="https://phps.yycxw.com/static/images/cardxiayige-3.png" alt="python中的enumerate函数怎么用_python enumerate()函数的用法与技巧"> iv>

此外,iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>不光能用于列表,任何可迭代对象都可以:元组、字符串、集合(虽然集合没有固定顺序,但iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>会按迭代顺序给它分配索引)、字典(遍历键)。虽然对集合和字典来说,索引的意义可能没那么大,但在某些需要统一处理所有可迭代对象的泛型代码里,知道它能工作也是一种优势。

iv style="position:relative; padding:0px; margin:0px;">

my_string = "Python" for i, char in enumerate(my_string):     print(f"字符 '{char}' 在位置 {i}")  my_tuple = ('a', 'b', 'c') for i, val in enumerate(my_tuple):     print(f"元组值 '{val}' 在索引 {i}")

iv>iv>iv>

在实际项目中,iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate()

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>函数有哪些常见应用场景?

iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate()

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>在实际开发中,它的应用场景远不止简单的遍历打印。我遇到过不少情况,它能让代码变得更简洁高效。

一个很常见的场景是数据处理和转换。假设你有一个列表,需要根据元素的索引来做一些条件判断或者修改:

iv style="position:relative; padding:0px; margin:0px;">

scores = [85, 92, 78, 95, 60, 88] updated_scores = []  for i, score in enumerate(scores):     if score < 70:         # 给不及格的同学加10分,但不超过90         updated_scores.append(min(score + 10, 90))     else:         updated_scores.append(score)  print(f"原始分数: {scores}") print(f"更新后分数: {updated_scores}")  # 输出: # 原始分数: [85, 92, 78, 95, 60, 88] # 更新后分数: [85, 92, 78, 95, 70, 88]

iv>iv>iv>

这里,我们通过iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>轻松地获取了分数和它在列表中的位置,然后根据这个位置和分数本身做了决策。

再比如,构建字典。如果你有一个键列表和一个值列表,想把它们配对成字典:

iv style="position:relative; padding:0px; margin:0px;">

keys = ['name', 'age', 'city'] values = ['Alice', 30, 'New York']  # 如果两个列表长度相同,可以用zip,但如果只有values列表,而keys需要根据索引生成呢? # 或者我们希望根据索引来动态生成键 data_dict = {} for i, val in enumerate(values):     # 稍微复杂一点的键生成逻辑,如果键列表不够长,就用通用键名     data_dict[keys[i] if i < len(keys) else f"unknown_key_{i}"] = val      # 简单的场景,假设keys和values长度一致:     # data_dict[keys[i]] = val  print(f"生成的字典: {data_dict}") # 输出: # 生成的字典: {'name': 'Alice', 'age': 30, 'city': 'New York'}

iv>iv>iv>

这个例子稍微复杂了一点,但它展示了iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>在处理不对称数据或需要根据索引动态生成键时的潜力。

另一个非常实用的场景是日志记录或错误报告。当你处理一个文件或者一个批次的数据时,如果出现问题,能够报告是“第几行”或者“第几个数据”出了错,这对于调试来说简直是金子般的提示。

iv style="position:relative; padding:0px; margin:0px;">

lines = [     "数据1: 正常",     "数据2: 错误格式",     "数据3: 正常",     "数据4: 另一错误" ]  for line_num, line_content in enumerate(lines, start=1):     if "错误" in line_content:         print(f"⚠️ 在第 {line_num} 行发现问题: {line_content}")  # 输出: # ⚠️ 在第 2 行发现问题: 数据2: 错误格式 # ⚠️ 在第 4 行发现问题: 数据4: 另一错误

iv>iv>iv>

通过iv style="position:relative; padding:0px; margin:0px;">

enumerate(..., start=1)

iv>iv>iv>,我们直接得到了符合人类阅读习惯的行号,这比从0开始的索引要友好得多。

总的来说,iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">iv style="position:relative; padding:0px; margin:0px;">

enumerate

iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>iv>不仅仅是一个语法糖,它更是一种编程思想的体现:当索引和值同样重要时,就应该把它们作为一个整体来处理。它让我们的代码更清晰、更安全,也更符合Python的哲学。

iv style="display: inline-flex;"> 相关标签: iv style="display:flex;"> ick="hits_log(2,'www',this);" href-data="/zt/15730.html" target="_blank">python ick="hits_log(2,'www',this);" href-data="/zt/16186.html" target="_blank">app ick="hits_log(2,'www',this);" href-data="/zt/19200.html" target="_blank">apple ick="hits_log(2,'www',this);" href-data="/zt/51951.html" target="_blank">可迭代对象 ick="hits_log(2,'www',this);" href-data="/zt/55554.html" target="_blank">代码可读性 ick="hits_log(2,'www',this);" href-data="/zt/92702.html" target="_blank">为什么 ick="hits_log(2,'www',this);" href-data="/search?word=Python" target="_blank">Python ick="hits_log(2,'www',this);" href-data="/search?word=for" target="_blank">for ick="hits_log(2,'www',this);" href-data="/search?word=字符串" target="_blank">字符串 ick="hits_log(2,'www',this);" href-data="/search?word=循环" target="_blank">循环 ick="hits_log(2,'www',this);" href-data="/search?word=泛型" target="_blank">泛型 ick="hits_log(2,'www',this);" href-data="/search?word=len" target="_blank">len ick="hits_log(2,'www',this);" href-data="/search?word=对象" target="_blank">对象 ick="hits_log(2,'www',this);" href-data="/search?word=低代码" target="_blank">低代码 iv> iv> iv>

大家都在看:

iv> itle="Python怎么对列表进行排序_Python列表排序技巧汇总">Python怎么对列表进行排序_Python列表排序技巧汇总 itle="Python递归实现整数求和:规避内置函数限制的技巧">Python递归实现整数求和:规避内置函数限制的技巧 itle="Python 递归求和:不使用内置函数的实现方法">Python 递归求和:不使用内置函数的实现方法 itle="python怎么检查一个文件或文件夹是否存在_python文件与文件夹存在性检查">python怎么检查一个文件或文件夹是否存在_python文件与文件夹存在性检查 itle="Conda环境创建中Python版本指定错误及解决方案:理解=与==的区别">Conda环境创建中Python版本指定错误及解决方案:理解=与==的区别 iv> iv> iv> ick="hits_log(2,'www',this);" href-data="/zt/15730.html" target="_blank">python ick="hits_log(2,'www',this);" href-data="/zt/16186.html" target="_blank">app ick="hits_log(2,'www',this);" href-data="/zt/19200.html" target="_blank">apple ick="hits_log(2,'www',this);" href-data="/zt/51951.html" target="_blank">可迭代对象 ick="hits_log(2,'www',this);" href-data="/zt/55554.html" target="_blank">代码可读性 ick="hits_log(2,'www',this);" href-data="/zt/92702.html" target="_blank">为什么 ick="hits_log(2,'www',this);" href-data="/search?word=Python" target="_blank">Python ick="hits_log(2,'www',this);" href-data="/search?word=for" target="_blank">for ick="hits_log(2,'www',this);" href-data="/search?word=字符串" target="_blank">字符串 ick="hits_log(2,'www',this);" href-data="/search?word=循环" target="_blank">循环 ick="hits_log(2,'www',this);" href-data="/search?word=泛型" target="_blank">泛型 ick="hits_log(2,'www',this);" href-data="/search?word=len" target="_blank">len ick="hits_log(2,'www',this);" href-data="/search?word=对象" target="_blank">对象 ick="hits_log(2,'www',this);" href-data="/search?word=低代码" target="_blank">低代码

text=ZqhQzanResources