找出索引,而不只是数值
使用 enumerate 跟踪位置
找出索引,而不只是数值 是 CoddyKit 上的免费 Coding Interview Prep 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Coding Interview Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Coding Interview Prep 课程共包含 4 节课。
位置很重要
答案往往不是值本身,而是它所在的位置。竞赛题经常要求从 1 开始或从 0 开始的索引,因此请同时记录位置。
a = [4, 1, 7, 3]使用 .index() 查找
a.index(x) 会返回第一个匹配项的位置。它写起来很方便,但会从左到右以 O(n) 的复杂度进行扫描。
pos = a.index(7) # 2找不到值会引发错误
如果值不存在,.index() 会引发 ValueError,导致运行时崩溃。如果不确定,请先检查成员关系。
if x in a:
pos = a.index(x)使用 enumerate 循环
enumerate 会在每一步同时提供索引和值,是扫描数组时跟踪位置的简洁方式。
for i, v in enumerate(a):
print(i, v)让 enumerate 从 1 开始
许多评测程序要求从 1 开始编号的位置。请向 enumerate 传入 start=1,使第一个索引为 1,与题目描述一致。
for i, v in enumerate(a, start=1):
...最大值的索引
如果要找到最大值所在的位置,就需要扫描数组并记住当前最佳索引,因为单独调用 max(a) 只能得到值。
best = 0
for i, v in enumerate(a):
if v > a[best]:
best = i简洁地求最大位置
有一种简洁的技巧:将每个索引和值配对,然后按值取最大值。range 会直接给出对应位置。
best = max(range(len(a)), key=lambda i: a[i])收集所有匹配的索引
需要找出某个值出现的所有位置吗?对 enumerate 使用推导式,一行代码就能收集所有匹配项。
idx = [i for i, v in enumerate(a) if v == 7]将值映射到索引
如果需要反复查找,请先构建一个从值到索引的字典,让之后的每次查找都能在 O(1) 时间内完成。
where = {v: i for i, v in enumerate(a)}处理重复值时要小心
从值映射到索引的字典只保留最后一次出现的位置。如果重复值很重要,请为每个键使用一个列表,或使用 enumerate。
where = {}
for i, v in enumerate(a):
where.setdefault(v, []).append(i)转换索引基准
请注意编号基准:如果保存的是从 0 开始的索引,但必须输出从 1 开始的索引,请加 1。混用不同基准很容易悄悄导致答案错误。
print(pos + 1) # 0-based to 1-based快速检查
如果您想在循环时使用从 1 开始的位置,应该怎么写?
回顾:跟踪位置
现在您已经可以安全地查找单个索引、最大值索引和所有索引,也能将值映射到位置。enumerate 是可靠的位置跟踪工具。🎯
常见问题解答
「找出索引,而不只是数值」课时是免费的吗?
是的 — 「找出索引,而不只是数值」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Coding Interview Prep 课程的其余内容,请升级到 CoddyKit PRO。 Coding Interview Prep 课程共包含 4 节课。
「找出索引,而不只是数值」这节课中我会学到什么?
使用 enumerate 跟踪位置 你通过在浏览器中直接运行的动手代码来练习 Coding Interview Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Coding Interview Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Coding Interview Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「找出索引,而不只是数值」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Coding Interview Prep 课中编写并运行代码吗?
能。每节 Coding Interview Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 适用于 CP 的列表、索引与切片
- 使用推导式快速构建数组
- 最小值、最大值、总和与累计总计
- 找出索引,而不只是数值