欢迎光临
我们一直在努力

python中的enmerate

在 Python 里,enumerate 是个小巧又非常贴心的工具。它像是给普通循环装上了“编号器”,让你在遍历序列时,不仅拿到元素本身,还能同时拿到它的索引。这样你就不用再手搓一个 i = 0 然后 i += 1 的尴尬计数器了。

可以把它理解成“给序列打上序号的发电机”。


它长什么样?

最常见的用法是:

for index, value in enumerate(some_list):
print(index, value)

enumerate(some_list) 会生成一个一个的 (index, value) 元组。默认 index 从 0 开始,这和 Python 的万物以 0 开头的哲学是一致的。


起步值可以自定义

如果你不喜欢从 0 开始,它也很体贴:

for i, v in enumerate(['a', 'b', 'c'], start=1):
print(i, v)

这会输出:

1 a
2 b
3 c

就像给循环加了一个“起跑线调整器”。


为什么要用它?

没有 enumerate 时,你的代码可能长成这样:

i = 0
for v in data:
print(i, v)
i += 1

这段代码啥也没错,只是有点像用手写 for 循环替代 for 循环。
enumerate 的存在,就是把这种重复劳动扔掉,让你更关注逻辑而不是计数细节。


一个小实战:找列表里所有偶数的位置

想象你正在处理一串温度传感器读数,需要找出异常(比如偶数)的位置:

data = [13, 20, 18, 21, 33, 40]
odd_positions = []

for idx, val in enumerate(data):
if val % 2 == 0:
odd_positions.append(idx)

print(odd_positions)

输出:

[1, 2, 5]

这种“带位置的遍历场景”,正是 enumerate 的黄金应用场。


它其实不只给列表用

它能枚举任何可迭代对象。包括字符串、元组、文件行等:

for line_num, line in enumerate(open('log.txt'), start=1):
print(f"Line {line_num}: {line}")

这让文件解析工作变得不那么枯燥——你甚至能顺便做个简单的行号标记器。


微妙的底层真相

enumerate 本质是个迭代器(iterator),不会一次性把所有编号都生成出来。这意味着它既省内存,又优雅。
每次循环,它才懒兮兮地造出下一个 (index, value)。

赞(0)
未经允许不得转载:171主机测评 » python中的enmerate
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址