You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现两数之和取索引时index()报ValueError问题求助

错误原因分析

你对index()方法的参数规则理解有误。Python列表的index()方法语法为list.index(查找值, 起始查找索引, 结束查找索引),第二个入参是查找的起始位置,而非你以为的第二个查找目标。
当代码命中条件时,i=7,a[cnt]=20,你写的a.index(i,a[cnt])相当于从索引为20的位置开始查找7,但你的数组总长度仅为5,最大索引为4,查找范围超出数组边界,自然会抛出元素不存在的错误。

原有逻辑修正

你在循环中已经持有第二个元素的索引变量cnt,外层遍历只要通过enumerate同时获取第一个元素的索引,不需要额外调用index()即可拿到结果:

def func(a,b):
    for idx1, val1 in enumerate(a): 
        cnt = 0
        while cnt < len(a):
            val2 = a[cnt]
            if val1 + val2 == b and idx1 != cnt:
                return [idx1, cnt]
            cnt += 1               
print(func([3,7,2,10,20],27))

注意:你原代码中的i != a[cnt]判断逻辑存在缺陷,如果数组中存在两个相同值的元素相加等于目标值(例如[2,2],目标值4),会被错误过滤,应该改为判断两个元素的索引不同。

高效实现方案

不需要嵌套循环的O(n)复杂度方案,可以通过哈希表(字典)存储已遍历元素和对应索引,一次遍历即可完成匹配:

def func(a, target):
    num_map = {}
    for idx, val in enumerate(a):
        diff = target - val
        if diff in num_map:
            return [num_map[diff], idx]
        num_map[val] = idx
print(func([3,7,2,10,20],27))

该方案不需要调用index()方法,也不需要嵌套循环,性能远高于两层循环的实现,同时也能正确处理重复值的匹配场景。

内容的提问来源于stack exchange,提问作者Butterman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:45:06